| @@ -1,15 +0,0 @@ | |||||
| package xyz.veronie.bgg.data; | |||||
| public enum FilterFlagState { | |||||
| IS(0), ISNOT(1), IGNORE(2); | |||||
| private int state; | |||||
| private FilterFlagState(int state) { | |||||
| this.state = state; | |||||
| } | |||||
| public int get() { | |||||
| return this.state; | |||||
| } | |||||
| } | |||||
| @@ -1,20 +0,0 @@ | |||||
| package xyz.veronie.bgg.data; | |||||
| import java.util.HashMap; | |||||
| /// DTO / container for configuration of result download | |||||
| public class ResultConfig { | |||||
| // TODO: integrate different filters (or extend?) | |||||
| public HashMap<Subtype,Boolean> subTypes; | |||||
| public ResultAction action; | |||||
| public SourceFilter source; | |||||
| public String user; | |||||
| public HashMap<UserFlag, FilterFlagState> userFlags; | |||||
| public Integer geeklistId; | |||||
| public Integer familyId; | |||||
| // TODO: add others | |||||
| } | |||||
| @@ -1,59 +0,0 @@ | |||||
| package xyz.veronie.bgg.data; | |||||
| import javax.inject.Inject; | |||||
| import org.eclipse.e4.core.di.annotations.Optional; | |||||
| import org.eclipse.e4.ui.di.UIEventTopic; | |||||
| public class ResultConfigManager { | |||||
| private ResultConfig resultConfig = new ResultConfig(); | |||||
| @Inject | |||||
| @Optional | |||||
| private void subscribeTopicSourceFilterChanged | |||||
| (@UIEventTopic(EventConstants.TOPIC_FILTER_CHANGED) | |||||
| SourceFilter source) { | |||||
| getResultConfig().source = source; | |||||
| } | |||||
| @Inject | |||||
| @Optional | |||||
| private void subscribeTopicSubtypesChanged | |||||
| (@UIEventTopic(EventConstants.TOPIC_SUBTYPE_CHANGED) | |||||
| Subtype subtype, Boolean checked) { | |||||
| getResultConfig().subTypes.put(subtype, checked); | |||||
| } | |||||
| @Inject | |||||
| @Optional | |||||
| private void subscribeTopicUserChanged | |||||
| (@UIEventTopic(EventConstants.TOPIC_USER_CHANGED) | |||||
| String user) { | |||||
| System.out.println("set user to '" + user + "'"); | |||||
| getResultConfig().user = user; | |||||
| } | |||||
| @Inject | |||||
| @Optional | |||||
| private void subscribeTopicUserFlagChanged | |||||
| (@UIEventTopic(EventConstants.TOPIC_USERFLAG_CHANGED) | |||||
| UserFlag flag, FilterFlagState state) { | |||||
| getResultConfig().userFlags.put(flag, state); | |||||
| } | |||||
| @Inject | |||||
| @Optional | |||||
| private void subscribeTopicResultActionChanged | |||||
| (@UIEventTopic(EventConstants.TOPIC_ACTION_CHANGED) | |||||
| ResultAction action) { | |||||
| getResultConfig().action = action; | |||||
| } | |||||
| public ResultConfig getResultConfig() { | |||||
| return resultConfig; | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,45 @@ | |||||
| package xyz.veronie.bgg.result; | |||||
| import java.util.HashMap; | |||||
| import xyz.veronie.bgg.types.FilterFlagState; | |||||
| import xyz.veronie.bgg.types.ResultAction; | |||||
| import xyz.veronie.bgg.types.SourceFilter; | |||||
| import xyz.veronie.bgg.types.Subtype; | |||||
| import xyz.veronie.bgg.types.UserFlag; | |||||
| /// DTO / container for configuration of result download. Also defines startup settings for controls. | |||||
| /// This container is handled by the ResultConfigManager. | |||||
| public class ResultConfig { | |||||
| // TODO: integrate different filters (or extend?) | |||||
| public SourceFilter source = SourceFilter.BGG_USER; | |||||
| public ResultAction action = ResultAction.ADD; | |||||
| public HashMap<Subtype,Boolean> subTypes = new HashMap<Subtype,Boolean>() { | |||||
| private static final long serialVersionUID = -8718858283141976457L; | |||||
| { | |||||
| for (Subtype st : Subtype.values()) { | |||||
| put(st, false); | |||||
| } | |||||
| put(Subtype.BOARDGAME, true); | |||||
| }}; | |||||
| // bgg user filter settings | |||||
| public String user = ""; | |||||
| public HashMap<UserFlag, FilterFlagState> userFlags = new HashMap<UserFlag, FilterFlagState>() { | |||||
| private static final long serialVersionUID = 3086538711393696853L; | |||||
| { | |||||
| for (UserFlag uf : UserFlag.values()) { | |||||
| put(uf, FilterFlagState.IGNORE); | |||||
| } | |||||
| put(UserFlag.OWN, FilterFlagState.IS); | |||||
| put(UserFlag.PREVIOUSLY_OWNED, FilterFlagState.ISNOT); | |||||
| }}; | |||||
| public Integer geeklistId = null; | |||||
| public Integer familyId = null; | |||||
| // TODO: add others | |||||
| } | |||||
| @@ -0,0 +1,84 @@ | |||||
| package xyz.veronie.bgg.result; | |||||
| import javax.inject.Inject; | |||||
| import javax.inject.Singleton; | |||||
| import org.eclipse.e4.core.di.annotations.Creatable; | |||||
| import org.eclipse.e4.core.di.annotations.Optional; | |||||
| import org.eclipse.e4.ui.di.UIEventTopic; | |||||
| import xyz.veronie.bgg.types.EventConstants; | |||||
| import xyz.veronie.bgg.types.ResultAction; | |||||
| import xyz.veronie.bgg.types.SourceFilter; | |||||
| import xyz.veronie.bgg.types.SubtypeEvent; | |||||
| import xyz.veronie.bgg.types.UserFlagEvent; | |||||
| /// This object/instance is responsible for managing the current state of the configuration for | |||||
| /// BGG result downloads. It is sent an event whenever one of the controls for the | |||||
| /// configuration changes, and modifies the ResultConfig accordingly. | |||||
| /// Other parts of the program can ask for the result config to either display its state | |||||
| /// or execute the BGG download. | |||||
| @Creatable | |||||
| @Singleton | |||||
| public class ResultConfigManager { | |||||
| private ResultConfig resultConfig; | |||||
| public ResultConfigManager() { | |||||
| resultConfig = new ResultConfig(); | |||||
| } | |||||
| @Inject | |||||
| @Optional | |||||
| private void subscribeTopicSourceChanged | |||||
| (@UIEventTopic(EventConstants.TOPIC_SOURCE_CHANGED) | |||||
| SourceFilter source) { | |||||
| getResultConfig().source = source; | |||||
| System.out.println("TOPIC_SOURCE_CHANGED: source = " + source); | |||||
| } | |||||
| @Inject | |||||
| @Optional | |||||
| private void subscribeTopicSubtypesChanged | |||||
| (@UIEventTopic(EventConstants.TOPIC_SUBTYPE_CHANGED) | |||||
| SubtypeEvent se) { | |||||
| getResultConfig().subTypes.put(se.subtype, se.checked); | |||||
| System.out.println("TOPIC_SUBTYPE_CHANGED: " + (se.checked?"[x] ":"[ ] ") + se.subtype); | |||||
| } | |||||
| @Inject | |||||
| @Optional | |||||
| private void subscribeTopicUserChanged | |||||
| (@UIEventTopic(EventConstants.TOPIC_USER_CHANGED) | |||||
| String user) { | |||||
| System.out.println("set user to '" + user + "'"); | |||||
| getResultConfig().user = user; | |||||
| System.out.println("TOPIC_USER_CHANGED: user = " + user); | |||||
| } | |||||
| @Inject | |||||
| @Optional | |||||
| private void subscribeTopicUserFlagChanged | |||||
| (@UIEventTopic(EventConstants.TOPIC_USERFLAG_CHANGED) | |||||
| UserFlagEvent e) { | |||||
| getResultConfig().userFlags.put(e.flag, e.state); | |||||
| System.out.println("TOPIC_USERFLAG_CHANGED: " + e.flag + " " + e.state); | |||||
| } | |||||
| @Inject | |||||
| @Optional | |||||
| private void subscribeTopicResultActionChanged | |||||
| (@UIEventTopic(EventConstants.TOPIC_ACTION_CHANGED) | |||||
| ResultAction action) { | |||||
| getResultConfig().action = action; | |||||
| System.out.println("TOPIC_ACTION_CHANGED: action = " + action); | |||||
| } | |||||
| public ResultConfig getResultConfig() { | |||||
| return resultConfig; | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,57 @@ | |||||
| package xyz.veronie.bgg.result; | |||||
| public class Thing { | |||||
| Integer id; | |||||
| String name; | |||||
| String designer; | |||||
| String publisher; | |||||
| String artist; | |||||
| Integer yearpublished; | |||||
| Integer minplayers; | |||||
| Integer maxplayers; | |||||
| Integer playingtime; | |||||
| Integer minplaytime; | |||||
| Integer maxplaytime; | |||||
| Integer age; | |||||
| Integer usersrated; | |||||
| Integer average; | |||||
| Float bayesaverage; | |||||
| Integer rank; | |||||
| Integer rank_wg; | |||||
| Integer numcomments; | |||||
| Integer numweights; | |||||
| Float averageweight; | |||||
| Float stddev; | |||||
| Float median; | |||||
| Boolean owned; | |||||
| Boolean trading; | |||||
| Boolean wanting; | |||||
| Boolean wishing; | |||||
| Float userrating; | |||||
| String image; | |||||
| Integer category; | |||||
| Integer mechanic; | |||||
| String comment; | |||||
| Integer[] players; // 1 to 20 | |||||
| String description; | |||||
| // exp, | |||||
| Integer basegameId; | |||||
| Integer reimplementId; | |||||
| String reimplement_name; | |||||
| Integer reimplementedById; | |||||
| String reimplementedByName; | |||||
| Integer containsId; | |||||
| String containsName; | |||||
| Integer iscontained; | |||||
| String iscontained_name; | |||||
| Integer integration; | |||||
| String integration_name; | |||||
| Integer numplays; | |||||
| Float price; | |||||
| Float userweight; | |||||
| Integer wishpriority; | |||||
| Integer expansions; | |||||
| String domain; | |||||
| String family; | |||||
| Float age_poll; | |||||
| } | |||||
| @@ -0,0 +1,106 @@ | |||||
| package xyz.veronie.bgg.result; | |||||
| import java.beans.PropertyChangeListener; | |||||
| import java.beans.PropertyChangeSupport; | |||||
| public class ThingMetaData { | |||||
| private int id; | |||||
| private Integer rating; | |||||
| private String imgURL; | |||||
| private String thumbURL; | |||||
| private String comment; | |||||
| private Integer otherId; // ??? | |||||
| private String username; | |||||
| private PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(this); | |||||
| public ThingMetaData(int id, Integer rating, String imgURL, String thumbURL, String comment, Integer otherId, String username) { | |||||
| this.setId(id); | |||||
| this.setRating(rating); | |||||
| this.setImgURL(imgURL); | |||||
| this.setThumbURL(thumbURL); | |||||
| this.setComment(comment); | |||||
| this.setOtherId(otherId); | |||||
| this.setUsername(username); | |||||
| } | |||||
| public void addPropertyChangeListener(String propertyName, | |||||
| PropertyChangeListener listener) { | |||||
| propertyChangeSupport.addPropertyChangeListener(propertyName, listener); | |||||
| } | |||||
| public void removePropertyChangeListener(PropertyChangeListener listener) { | |||||
| propertyChangeSupport.removePropertyChangeListener(listener); | |||||
| } | |||||
| public int getId() { | |||||
| return id; | |||||
| } | |||||
| public void setId(int id) { | |||||
| propertyChangeSupport.firePropertyChange("id", this.id, | |||||
| this.id = id); | |||||
| } | |||||
| public Integer getRating() { | |||||
| return rating; | |||||
| } | |||||
| public void setRating(Integer rating) { | |||||
| propertyChangeSupport.firePropertyChange("rating", this.rating, | |||||
| this.rating = rating); | |||||
| } | |||||
| public String getImgURL() { | |||||
| return imgURL; | |||||
| } | |||||
| public void setImgURL(String imgURL) { | |||||
| propertyChangeSupport.firePropertyChange("img", this.imgURL, | |||||
| this.imgURL = imgURL); | |||||
| } | |||||
| public String getThumbURL() { | |||||
| return thumbURL; | |||||
| } | |||||
| public void setThumbURL(String thumbURL) { | |||||
| propertyChangeSupport.firePropertyChange("thumb", this.thumbURL, | |||||
| this.thumbURL = thumbURL); | |||||
| } | |||||
| public String getComment() { | |||||
| return comment; | |||||
| } | |||||
| public void setComment(String comment) { | |||||
| propertyChangeSupport.firePropertyChange("comment", this.comment, | |||||
| this.comment = comment); | |||||
| } | |||||
| public Integer getOtherId() { | |||||
| return otherId; | |||||
| } | |||||
| public void setOtherId(Integer otherId) { | |||||
| propertyChangeSupport.firePropertyChange("otherId", this.otherId, | |||||
| this.otherId = otherId); | |||||
| } | |||||
| public String getUsername() { | |||||
| return username; | |||||
| } | |||||
| public void setUsername(String username) { | |||||
| propertyChangeSupport.firePropertyChange("username", this.username, | |||||
| this.username = username); | |||||
| } | |||||
| @Override | |||||
| public String toString() { | |||||
| return String.valueOf(id); | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,29 @@ | |||||
| package xyz.veronie.bgg.result; | |||||
| import java.util.ArrayList; | |||||
| import java.util.List; | |||||
| public enum ThingProvider { | |||||
| INSTANCE; | |||||
| private List<ThingMetaData> thingMetas; | |||||
| private ThingProvider() { | |||||
| thingMetas = new ArrayList<ThingMetaData>(); | |||||
| // TODO: retrieve data from BGG | |||||
| // ...and iterate: | |||||
| thingMetas.add(new ThingMetaData( | |||||
| 286053, | |||||
| null, | |||||
| "https://cf.geekdo-images.com/original/img/vKBCxo7d6maBDC_X9nmC5MWzIC8=/0x0/pic4880614.jpg", | |||||
| "https://cf.geekdo-images.com/thumb/img/gpeB-GrXrknzAqFKEky1JOvcY4w=/fit-in/200x150/pic4880614.jpg", | |||||
| "", | |||||
| 65212097, | |||||
| "veronie")); | |||||
| } | |||||
| public List<ThingMetaData> getThingMetas() { | |||||
| return thingMetas; | |||||
| } | |||||
| } | |||||
| @@ -1,4 +1,4 @@ | |||||
| package xyz.veronie.bgg.data; | |||||
| package xyz.veronie.bgg.types; | |||||
| /// This class contains and handles the result table for BGG things | /// This class contains and handles the result table for BGG things | ||||
| public class BggResult { | public class BggResult { | ||||
| @@ -1,10 +1,10 @@ | |||||
| package xyz.veronie.bgg.data; | |||||
| package xyz.veronie.bgg.types; | |||||
| public interface EventConstants { | public interface EventConstants { | ||||
| String TOPIC_CONFIG_CHANGED = "CONFIG_CHANGED/*"; | String TOPIC_CONFIG_CHANGED = "CONFIG_CHANGED/*"; | ||||
| String TOPIC_FILTER_CHANGED = "CONFIG_CHANGED/FILTER"; | |||||
| String TOPIC_SOURCE_CHANGED = "CONFIG_CHANGED/FILTER"; | |||||
| String TOPIC_SUBTYPE_CHANGED = "CONFIG_CHANGED/SUBTYPE"; | String TOPIC_SUBTYPE_CHANGED = "CONFIG_CHANGED/SUBTYPE"; | ||||
| @@ -14,4 +14,6 @@ public interface EventConstants { | |||||
| String TOPIC_USER_CHANGED = "CONFIG_CHANGED/USER"; | String TOPIC_USER_CHANGED = "CONFIG_CHANGED/USER"; | ||||
| String TOPIC_GEEKLIST_CHANGED = "CONFIG_CHANGED/GEEKLIST"; | |||||
| } | } | ||||
| @@ -0,0 +1,18 @@ | |||||
| package xyz.veronie.bgg.types; | |||||
| public enum FilterFlagState { | |||||
| IS("is"), | |||||
| ISNOT("is not"), | |||||
| IGNORE("ignore"); | |||||
| private String name; | |||||
| private FilterFlagState(String name) { | |||||
| this.name = name; | |||||
| } | |||||
| @Override | |||||
| public String toString() { | |||||
| return name; | |||||
| } | |||||
| } | |||||
| @@ -1,4 +1,4 @@ | |||||
| package xyz.veronie.bgg.data; | |||||
| package xyz.veronie.bgg.types; | |||||
| public enum ResultAction { | public enum ResultAction { | ||||
| ADD("add"), | ADD("add"), | ||||
| @@ -1,4 +1,4 @@ | |||||
| package xyz.veronie.bgg.data; | |||||
| package xyz.veronie.bgg.types; | |||||
| public enum SourceFilter { | public enum SourceFilter { | ||||
| @@ -1,4 +1,4 @@ | |||||
| package xyz.veronie.bgg.data; | |||||
| package xyz.veronie.bgg.types; | |||||
| public enum Subtype { | public enum Subtype { | ||||
| BOARDGAME("Board games", "boardgame"), | BOARDGAME("Board games", "boardgame"), | ||||
| @@ -0,0 +1,6 @@ | |||||
| package xyz.veronie.bgg.types; | |||||
| public class SubtypeEvent { | |||||
| public Subtype subtype; | |||||
| public Boolean checked; | |||||
| } | |||||
| @@ -1,4 +1,4 @@ | |||||
| package xyz.veronie.bgg.data; | |||||
| package xyz.veronie.bgg.types; | |||||
| public enum UserFlag { | public enum UserFlag { | ||||
| @@ -0,0 +1,6 @@ | |||||
| package xyz.veronie.bgg.types; | |||||
| public class UserFlagEvent { | |||||
| public UserFlag flag; | |||||
| public FilterFlagState state; | |||||
| } | |||||
| @@ -1,10 +1,18 @@ | |||||
| package xyz.veronie.bgg.ui.filters; | package xyz.veronie.bgg.ui.filters; | ||||
| import java.util.HashMap; | |||||
| import java.util.Arrays; | |||||
| import java.util.List; | |||||
| import javax.inject.Inject; | import javax.inject.Inject; | ||||
| import org.eclipse.e4.core.di.annotations.Creatable; | |||||
| import org.eclipse.e4.core.services.events.IEventBroker; | import org.eclipse.e4.core.services.events.IEventBroker; | ||||
| import org.eclipse.jface.viewers.ArrayContentProvider; | |||||
| import org.eclipse.jface.viewers.ComboViewer; | |||||
| import org.eclipse.jface.viewers.ISelectionChangedListener; | |||||
| 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.SWT; | ||||
| import org.eclipse.swt.events.FocusEvent; | import org.eclipse.swt.events.FocusEvent; | ||||
| import org.eclipse.swt.events.FocusListener; | import org.eclipse.swt.events.FocusListener; | ||||
| @@ -17,9 +25,11 @@ import org.eclipse.swt.widgets.Combo; | |||||
| import org.eclipse.swt.widgets.Composite; | import org.eclipse.swt.widgets.Composite; | ||||
| import org.eclipse.swt.widgets.Label; | import org.eclipse.swt.widgets.Label; | ||||
| import xyz.veronie.bgg.data.EventConstants; | |||||
| import xyz.veronie.bgg.data.FilterFlagState; | |||||
| import xyz.veronie.bgg.data.UserFlag; | |||||
| import xyz.veronie.bgg.result.ResultConfigManager; | |||||
| import xyz.veronie.bgg.types.EventConstants; | |||||
| import xyz.veronie.bgg.types.FilterFlagState; | |||||
| import xyz.veronie.bgg.types.UserFlag; | |||||
| import xyz.veronie.bgg.types.UserFlagEvent; | |||||
| @@ -28,23 +38,11 @@ import xyz.veronie.bgg.data.UserFlag; | |||||
| /// These are the controls to retrieve thing IDs for a given BGG user | /// These are the controls to retrieve thing IDs for a given BGG user | ||||
| /// Filters can be set for the state of the thing in the user's collection | /// Filters can be set for the state of the thing in the user's collection | ||||
| /// (i.e. owned, previously owned, wishlist, etc.) | /// (i.e. owned, previously owned, wishlist, etc.) | ||||
| @Creatable | |||||
| public class BggUserSourceFilter { | public class BggUserSourceFilter { | ||||
| @Inject | |||||
| private IEventBroker eventBroker; | |||||
| private HashMap<UserFlag, FilterFlagState> flags = new HashMap<UserFlag, FilterFlagState>() { | |||||
| private static final long serialVersionUID = 1L; | |||||
| { | |||||
| put(UserFlag.OWN, FilterFlagState.IS); | |||||
| put(UserFlag.PREVIOUSLY_OWNED, FilterFlagState.ISNOT); | |||||
| put(UserFlag.FOR_TRADE, FilterFlagState.IGNORE); | |||||
| put(UserFlag.WANTED, FilterFlagState.IGNORE); | |||||
| put(UserFlag.WTP, FilterFlagState.IGNORE); | |||||
| put(UserFlag.WTB, FilterFlagState.IGNORE); | |||||
| put(UserFlag.WISHLIST, FilterFlagState.IGNORE); | |||||
| put(UserFlag.PREORDERED, FilterFlagState.IGNORE); | |||||
| }}; | |||||
| @Inject private IEventBroker eventBroker; | |||||
| @Inject private ResultConfigManager configManager; | |||||
| public void create(Composite parent, int style) { | public void create(Composite parent, int style) { | ||||
| @@ -54,9 +52,23 @@ public class BggUserSourceFilter { | |||||
| Label lblUser = new Label(parent, SWT.LEFT); | Label lblUser = new Label(parent, SWT.LEFT); | ||||
| lblUser.setText("User name: "); | lblUser.setText("User name: "); | ||||
| lblUser.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false)); | lblUser.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false)); | ||||
| // // Define field assists for the text widget | |||||
| // // use "." and " " activate the content proposals | |||||
| // char[] autoActivationCharacters = new char[] { '.', ' ' }; | |||||
| // KeyStroke keyStroke; | |||||
| // try { | |||||
| // keyStroke = KeyStroke.getInstance("Ctrl+Space"); | |||||
| // new ContentProposalAdapter(text, new TextContentAdapter(), | |||||
| // new SimpleContentProposalProvider(new String[] { "ProposalOne", "ProposalTwo", "ProposalThree" }), | |||||
| // keyStroke, autoActivationCharacters); | |||||
| // } catch (ParseException e1) { | |||||
| // e1.printStackTrace(); | |||||
| // } | |||||
| Combo cbUserName = new Combo(parent, SWT.DROP_DOWN); | Combo cbUserName = new Combo(parent, SWT.DROP_DOWN); | ||||
| cbUserName.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false)); | cbUserName.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false)); | ||||
| cbUserName.setText(configManager.getResultConfig().user); | |||||
| cbUserName.addSelectionListener(new SelectionAdapter() { | cbUserName.addSelectionListener(new SelectionAdapter() { | ||||
| public void widgetDefaultSelected(SelectionEvent e) { | public void widgetDefaultSelected(SelectionEvent e) { | ||||
| setUser(cbUserName.getText()); | setUser(cbUserName.getText()); | ||||
| @@ -78,6 +90,7 @@ public class BggUserSourceFilter { | |||||
| Button btEditUsers = new Button(parent, SWT.PUSH); | Button btEditUsers = new Button(parent, SWT.PUSH); | ||||
| btEditUsers.setText("edit users"); | btEditUsers.setText("edit users"); | ||||
| btEditUsers.setEnabled(false); | btEditUsers.setEnabled(false); | ||||
| btEditUsers.setVisible(false); | |||||
| btEditUsers.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false)); | btEditUsers.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false)); | ||||
| // TODO: implement edit users | // TODO: implement edit users | ||||
| @@ -107,14 +120,25 @@ public class BggUserSourceFilter { | |||||
| // Filters are tri-state: include iff has flag, include iff it does not have the flag, | // Filters are tri-state: include iff has flag, include iff it does not have the flag, | ||||
| // don't care if it has that flag. | // don't care if it has that flag. | ||||
| // TODO: create a three-way toggle button instead. | // TODO: create a three-way toggle button instead. | ||||
| private void makeFilter(Composite parent, UserFlag key) { | |||||
| Combo filterCombo = new Combo(parent, SWT.READ_ONLY); | |||||
| filterCombo.add("is"); | |||||
| filterCombo.add("is not"); | |||||
| filterCombo.add("ignored"); | |||||
| filterCombo.select(flags.get(key).get()); | |||||
| filterCombo.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false)); | |||||
| // TODO: add listener - send a CONFIG_CHANGED event when something changes | |||||
| private void makeFilter(Composite parent, UserFlag key) { | |||||
| ComboViewer filterCombo = new ComboViewer(parent, SWT.READ_ONLY); | |||||
| filterCombo.setContentProvider(ArrayContentProvider.getInstance()); | |||||
| List<FilterFlagState> states = Arrays.asList(new FilterFlagState[] { | |||||
| FilterFlagState.IS, FilterFlagState.ISNOT, FilterFlagState.IGNORE | |||||
| }); | |||||
| filterCombo.setInput(states); | |||||
| filterCombo.setSelection(new StructuredSelection(configManager.getResultConfig().userFlags.get(key))); | |||||
| filterCombo.addSelectionChangedListener(new ISelectionChangedListener() { | |||||
| @Override | |||||
| public void selectionChanged(SelectionChangedEvent event) { | |||||
| IStructuredSelection selection = (IStructuredSelection) event.getSelection(); | |||||
| UserFlagEvent ufe = new UserFlagEvent(); | |||||
| ufe.flag = key; | |||||
| ufe.state = (FilterFlagState)selection.getFirstElement(); | |||||
| eventBroker.send(EventConstants.TOPIC_USERFLAG_CHANGED, ufe); | |||||
| } | |||||
| }); | |||||
| Label filterLabel = new Label(parent, SWT.LEFT); | Label filterLabel = new Label(parent, SWT.LEFT); | ||||
| filterLabel.setText(key.toString()); | filterLabel.setText(key.toString()); | ||||
| @@ -125,7 +149,7 @@ public class BggUserSourceFilter { | |||||
| if(eventBroker != null) { | if(eventBroker != null) { | ||||
| eventBroker.post(EventConstants.TOPIC_USER_CHANGED, user); | eventBroker.post(EventConstants.TOPIC_USER_CHANGED, user); | ||||
| } else { | } else { | ||||
| System.out.println("null???"); | |||||
| System.out.println("setGeeklistId: eventBroker is null."); | |||||
| } | } | ||||
| } | } | ||||
| @@ -1,5 +1,9 @@ | |||||
| package xyz.veronie.bgg.ui.filters; | package xyz.veronie.bgg.ui.filters; | ||||
| import javax.inject.Inject; | |||||
| import org.eclipse.e4.core.di.annotations.Creatable; | |||||
| import org.eclipse.e4.core.services.events.IEventBroker; | |||||
| import org.eclipse.swt.SWT; | import org.eclipse.swt.SWT; | ||||
| import org.eclipse.swt.events.FocusEvent; | import org.eclipse.swt.events.FocusEvent; | ||||
| import org.eclipse.swt.events.FocusListener; | import org.eclipse.swt.events.FocusListener; | ||||
| @@ -11,11 +15,17 @@ import org.eclipse.swt.widgets.Combo; | |||||
| import org.eclipse.swt.widgets.Composite; | import org.eclipse.swt.widgets.Composite; | ||||
| import org.eclipse.swt.widgets.Label; | import org.eclipse.swt.widgets.Label; | ||||
| import xyz.veronie.bgg.result.ResultConfigManager; | |||||
| import xyz.veronie.bgg.types.EventConstants; | |||||
| /// These are the controls to retrieve thing IDs for a given family ID | /// These are the controls to retrieve thing IDs for a given family ID | ||||
| @Creatable | |||||
| public class GeeklistSourceFilter { | public class GeeklistSourceFilter { | ||||
| private static Integer geeklistId; | |||||
| public static void create(Composite parent, int style) { | |||||
| @Inject private IEventBroker eventBroker; | |||||
| @Inject ResultConfigManager configManager; | |||||
| public void create(Composite parent, int style) { | |||||
| GridLayout filterLayout = new GridLayout(2, false); | GridLayout filterLayout = new GridLayout(2, false); | ||||
| parent.setLayout(filterLayout); | parent.setLayout(filterLayout); | ||||
| @@ -28,7 +38,7 @@ public class GeeklistSourceFilter { | |||||
| cbGeeklistId.addSelectionListener(new SelectionAdapter() { | cbGeeklistId.addSelectionListener(new SelectionAdapter() { | ||||
| public void widgetDefaultSelected(SelectionEvent e) { | public void widgetDefaultSelected(SelectionEvent e) { | ||||
| setGeeklistId(Integer.getInteger(cbGeeklistId.getText())); | setGeeklistId(Integer.getInteger(cbGeeklistId.getText())); | ||||
| System.out.println("set geeklist id to '" + getGeeklistId() + "'"); | |||||
| System.out.println("set geeklist id to '" + configManager.getResultConfig().geeklistId + "'"); | |||||
| } | } | ||||
| }); | }); | ||||
| cbGeeklistId.addFocusListener(new FocusListener() { | cbGeeklistId.addFocusListener(new FocusListener() { | ||||
| @@ -36,7 +46,7 @@ public class GeeklistSourceFilter { | |||||
| @Override | @Override | ||||
| public void focusLost(FocusEvent e) { | public void focusLost(FocusEvent e) { | ||||
| setGeeklistId(Integer.getInteger(cbGeeklistId.getText())); | setGeeklistId(Integer.getInteger(cbGeeklistId.getText())); | ||||
| System.out.println("set geeklist id to '" + getGeeklistId() + "'"); | |||||
| System.out.println("set geeklist id to '" + configManager.getResultConfig().geeklistId + "'"); | |||||
| } | } | ||||
| @Override | @Override | ||||
| @@ -47,11 +57,11 @@ public class GeeklistSourceFilter { | |||||
| parent.layout(); | parent.layout(); | ||||
| } | } | ||||
| public static Integer getGeeklistId() { | |||||
| return geeklistId; | |||||
| } | |||||
| public static void setGeeklistId(Integer geeklistId) { | |||||
| GeeklistSourceFilter.geeklistId = geeklistId; | |||||
| public void setGeeklistId(Integer geeklistId) { | |||||
| if(eventBroker != null) { | |||||
| eventBroker.post(EventConstants.TOPIC_GEEKLIST_CHANGED, geeklistId); | |||||
| } else { | |||||
| System.out.println("setGeeklistId: eventBroker is null."); | |||||
| } | |||||
| } | } | ||||
| } | } | ||||
| @@ -0,0 +1,54 @@ | |||||
| package xyz.veronie.bgg.ui.filters; | |||||
| import java.util.HashMap; | |||||
| import org.eclipse.e4.core.services.events.IEventBroker; | |||||
| 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.Group; | |||||
| import xyz.veronie.bgg.result.ResultConfigManager; | |||||
| import xyz.veronie.bgg.types.EventConstants; | |||||
| import xyz.veronie.bgg.types.Subtype; | |||||
| import xyz.veronie.bgg.types.SubtypeEvent; | |||||
| public class SubtypeGroup { | |||||
| private HashMap<Subtype, Button> buttons; | |||||
| public void create(Composite parent, IEventBroker eventBroker, ResultConfigManager configManager) { | |||||
| Group gSubtype = new Group(parent, SWT.LEFT); | |||||
| gSubtype.setText("Subtypes"); | |||||
| gSubtype.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); | |||||
| gSubtype.setLayout(new GridLayout(1, false)); | |||||
| buttons = new HashMap<Subtype, Button>(); | |||||
| for (Subtype st : Subtype.values()) { | |||||
| Button bb = new Button(gSubtype, SWT.CHECK); | |||||
| bb.setText(st.toString()); | |||||
| bb.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false)); | |||||
| // init | |||||
| HashMap<Subtype, Boolean> configuredTypes = configManager.getResultConfig().subTypes; | |||||
| bb.setSelection(configuredTypes.get(st)); | |||||
| bb.addSelectionListener(new SelectionAdapter() | |||||
| { | |||||
| @Override | |||||
| public void widgetSelected(SelectionEvent e) | |||||
| { | |||||
| SubtypeEvent stEvent = new SubtypeEvent(); | |||||
| stEvent.subtype = st; | |||||
| stEvent.checked = bb.getSelection(); | |||||
| eventBroker.send(EventConstants.TOPIC_SUBTYPE_CHANGED, stEvent); | |||||
| } | |||||
| }); | |||||
| buttons.put(st, bb); | |||||
| } | |||||
| } | |||||
| } | |||||
| @@ -1,40 +0,0 @@ | |||||
| package xyz.veronie.bgg.ui.filters; | |||||
| import java.util.HashMap; | |||||
| import org.eclipse.swt.SWT; | |||||
| 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.Group; | |||||
| import xyz.veronie.bgg.data.Subtype; | |||||
| public class ThingFilterGroup { | |||||
| private HashMap<Subtype, Button> buttons; | |||||
| public void create(Composite parent) { | |||||
| Group gSubtype = new Group(parent, SWT.LEFT); | |||||
| gSubtype.setText("Subtypes"); | |||||
| gSubtype.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); | |||||
| gSubtype.setLayout(new GridLayout(1, false)); | |||||
| buttons = new HashMap<Subtype, Button>(); | |||||
| for (Subtype st : Subtype.values()) { | |||||
| Button bb = new Button(gSubtype, SWT.CHECK); | |||||
| bb.setText(st.toString()); | |||||
| bb.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false)); | |||||
| if(st == Subtype.BOARDGAME) { | |||||
| // initially, only boardgame is checked | |||||
| bb.setSelection(true); | |||||
| } else { | |||||
| bb.setSelection(false); | |||||
| } | |||||
| // TODO: add listener to buttons. Send event with checked subtypes when something changes. | |||||
| buttons.put(st, bb); | |||||
| } | |||||
| } | |||||
| } | |||||
| @@ -2,22 +2,157 @@ package xyz.veronie.bgg.ui.parts; | |||||
| import javax.annotation.PostConstruct; | import javax.annotation.PostConstruct; | ||||
| import org.eclipse.jface.viewers.ArrayContentProvider; | |||||
| import org.eclipse.jface.viewers.ColumnLabelProvider; | |||||
| import org.eclipse.jface.viewers.TableViewer; | |||||
| import org.eclipse.jface.viewers.TableViewerColumn; | |||||
| import org.eclipse.swt.SWT; | import org.eclipse.swt.SWT; | ||||
| import org.eclipse.swt.layout.GridData; | import org.eclipse.swt.layout.GridData; | ||||
| //import org.eclipse.swt.layout.GridData; | |||||
| import org.eclipse.swt.layout.GridLayout; | |||||
| import org.eclipse.swt.widgets.Composite; | import org.eclipse.swt.widgets.Composite; | ||||
| import org.eclipse.swt.widgets.Label; | |||||
| import org.eclipse.swt.widgets.Table; | |||||
| import org.eclipse.swt.widgets.TableColumn; | |||||
| import xyz.veronie.bgg.data.ResultConfigManager; | |||||
| import xyz.veronie.bgg.result.ThingMetaData; | |||||
| import xyz.veronie.bgg.result.ThingProvider; | |||||
| public class BggResultPart { | public class BggResultPart { | ||||
| private TableViewer viewer; | |||||
| @PostConstruct | @PostConstruct | ||||
| public void createControls(Composite parent) { | public void createControls(Composite parent) { | ||||
| Composite main = new Composite(parent, SWT.FILL); | Composite main = new Composite(parent, SWT.FILL); | ||||
| GridLayout layout = new GridLayout(1, false); | |||||
| main.setLayout(layout); | |||||
| Label lblTable = new Label(main, SWT.LEFT); | |||||
| lblTable.setText("I am a table"); | |||||
| lblTable.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); | |||||
| createViewer(main); | |||||
| } | } | ||||
| private void createViewer(Composite parent) { | |||||
| viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL | |||||
| | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER); | |||||
| createColumns(parent, viewer); | |||||
| final Table table = viewer.getTable(); | |||||
| table.setHeaderVisible(true); | |||||
| table.setLinesVisible(true); | |||||
| viewer.setContentProvider(new ArrayContentProvider()); | |||||
| // Get the content for the viewer, setInput will call getElements in the | |||||
| // contentProvider | |||||
| viewer.setInput(ThingProvider.INSTANCE.getThingMetas()); | |||||
| // make the selection available to other views | |||||
| // TODO: getSite().setSelectionProvider(viewer); | |||||
| // Set the sorter for the table | |||||
| // Layout the viewer | |||||
| GridData gridData = new GridData(); | |||||
| gridData.verticalAlignment = GridData.FILL; | |||||
| gridData.horizontalSpan = 2; | |||||
| gridData.grabExcessHorizontalSpace = true; | |||||
| gridData.grabExcessVerticalSpace = true; | |||||
| gridData.horizontalAlignment = GridData.FILL; | |||||
| viewer.getControl().setLayoutData(gridData); | |||||
| } | |||||
| public TableViewer getViewer() { | |||||
| return viewer; | |||||
| } | |||||
| // This will create the columns for the table | |||||
| private void createColumns(final Composite parent, final TableViewer viewer) { | |||||
| String[] titles = { "Id", "Rating", "Image", "Thumb", "comment", "other Id", "User name" }; | |||||
| int[] bounds = { 100, 100, 100, 100, 100, 100, 100 }; | |||||
| // First column id | |||||
| TableViewerColumn col = createTableViewerColumn(titles[0], bounds[0], 0); | |||||
| col.setLabelProvider(new ColumnLabelProvider() { | |||||
| @Override | |||||
| public String getText(Object element) { | |||||
| ThingMetaData t = (ThingMetaData) element; | |||||
| return String.valueOf(t.getId()); | |||||
| } | |||||
| }); | |||||
| // Second column rating | |||||
| col = createTableViewerColumn(titles[1], bounds[1], 1); | |||||
| col.setLabelProvider(new ColumnLabelProvider() { | |||||
| @Override | |||||
| public String getText(Object element) { | |||||
| ThingMetaData t = (ThingMetaData) element; | |||||
| return String.valueOf(t.getRating()); | |||||
| } | |||||
| }); | |||||
| // now img url | |||||
| col = createTableViewerColumn(titles[2], bounds[2], 2); | |||||
| col.setLabelProvider(new ColumnLabelProvider() { | |||||
| @Override | |||||
| public String getText(Object element) { | |||||
| ThingMetaData t = (ThingMetaData) element; | |||||
| return t.getImgURL(); | |||||
| } | |||||
| }); | |||||
| // thumb url | |||||
| col = createTableViewerColumn(titles[3], bounds[3], 3); | |||||
| col.setLabelProvider(new ColumnLabelProvider() { | |||||
| @Override | |||||
| public String getText(Object element) { | |||||
| ThingMetaData t = (ThingMetaData) element; | |||||
| return t.getThumbURL(); | |||||
| } | |||||
| }); | |||||
| // comment | |||||
| col = createTableViewerColumn(titles[4], bounds[4], 4); | |||||
| col.setLabelProvider(new ColumnLabelProvider() { | |||||
| @Override | |||||
| public String getText(Object element) { | |||||
| ThingMetaData t = (ThingMetaData) element; | |||||
| return t.getComment(); | |||||
| } | |||||
| }); | |||||
| // other id | |||||
| col = createTableViewerColumn(titles[5], bounds[5], 5); | |||||
| col.setLabelProvider(new ColumnLabelProvider() { | |||||
| @Override | |||||
| public String getText(Object element) { | |||||
| ThingMetaData t = (ThingMetaData) element; | |||||
| return String.valueOf(t.getOtherId()); | |||||
| } | |||||
| }); | |||||
| // username | |||||
| col = createTableViewerColumn(titles[6], bounds[6], 6); | |||||
| col.setLabelProvider(new ColumnLabelProvider() { | |||||
| @Override | |||||
| public String getText(Object element) { | |||||
| ThingMetaData t = (ThingMetaData) element; | |||||
| return String.valueOf(t.getUsername()); | |||||
| } | |||||
| }); | |||||
| } | |||||
| private TableViewerColumn createTableViewerColumn(String title, int bound, final int colNumber) { | |||||
| final TableViewerColumn viewerColumn = new TableViewerColumn(viewer, | |||||
| SWT.NONE); | |||||
| final TableColumn column = viewerColumn.getColumn(); | |||||
| column.setText(title); | |||||
| column.setWidth(bound); | |||||
| column.setResizable(true); | |||||
| column.setMoveable(true); | |||||
| return viewerColumn; | |||||
| } | |||||
| /** | |||||
| * Passing the focus request to the viewer's control. | |||||
| */ | |||||
| public void setFocus() { | |||||
| viewer.getControl().setFocus(); | |||||
| } | |||||
| } | } | ||||
| @@ -4,7 +4,9 @@ import java.util.Arrays; | |||||
| import java.util.List; | import java.util.List; | ||||
| import javax.annotation.PostConstruct; | import javax.annotation.PostConstruct; | ||||
| import javax.inject.Inject; | |||||
| import org.eclipse.e4.core.services.events.IEventBroker; | |||||
| import org.eclipse.jface.viewers.ArrayContentProvider; | import org.eclipse.jface.viewers.ArrayContentProvider; | ||||
| import org.eclipse.jface.viewers.ComboViewer; | import org.eclipse.jface.viewers.ComboViewer; | ||||
| import org.eclipse.jface.viewers.ISelectionChangedListener; | import org.eclipse.jface.viewers.ISelectionChangedListener; | ||||
| @@ -24,16 +26,17 @@ import org.eclipse.swt.widgets.Display; | |||||
| import org.eclipse.swt.widgets.Group; | import org.eclipse.swt.widgets.Group; | ||||
| import org.eclipse.swt.widgets.Label; | import org.eclipse.swt.widgets.Label; | ||||
| import xyz.veronie.bgg.data.ResultAction; | |||||
| import xyz.veronie.bgg.data.ResultConfigManager; | |||||
| import xyz.veronie.bgg.data.SourceFilter; | |||||
| import xyz.veronie.bgg.result.ResultConfigManager; | |||||
| import xyz.veronie.bgg.types.EventConstants; | |||||
| import xyz.veronie.bgg.types.ResultAction; | |||||
| import xyz.veronie.bgg.types.SourceFilter; | |||||
| import xyz.veronie.bgg.ui.filters.AgeSourceFilter; | import xyz.veronie.bgg.ui.filters.AgeSourceFilter; | ||||
| import xyz.veronie.bgg.ui.filters.BggUserSourceFilter; | import xyz.veronie.bgg.ui.filters.BggUserSourceFilter; | ||||
| import xyz.veronie.bgg.ui.filters.FamilySourceFilter; | import xyz.veronie.bgg.ui.filters.FamilySourceFilter; | ||||
| import xyz.veronie.bgg.ui.filters.GeeklistSourceFilter; | import xyz.veronie.bgg.ui.filters.GeeklistSourceFilter; | ||||
| import xyz.veronie.bgg.ui.filters.RankSourceFilter; | import xyz.veronie.bgg.ui.filters.RankSourceFilter; | ||||
| import xyz.veronie.bgg.ui.filters.SearchSourceFilter; | import xyz.veronie.bgg.ui.filters.SearchSourceFilter; | ||||
| import xyz.veronie.bgg.ui.filters.ThingFilterGroup; | |||||
| import xyz.veronie.bgg.ui.filters.SubtypeGroup; | |||||
| import xyz.veronie.bgg.ui.filters.YearSourceFilter; | import xyz.veronie.bgg.ui.filters.YearSourceFilter; | ||||
| @@ -42,13 +45,14 @@ import xyz.veronie.bgg.ui.filters.YearSourceFilter; | |||||
| /// There are different ways to configure which IDs to retrieve. | /// There are different ways to configure which IDs to retrieve. | ||||
| public class LoadFromBggPart { | public class LoadFromBggPart { | ||||
| // TODO: figure out how to make sure this is a singleton | |||||
| private ResultConfigManager resultConfigManager; | |||||
| LoadFromBggPart() { | |||||
| resultConfigManager = new ResultConfigManager(); | |||||
| } | |||||
| @Inject | |||||
| private ResultConfigManager configManager; | |||||
| @Inject private IEventBroker eventBroker; | |||||
| // inject all source filter composites | |||||
| @Inject private BggUserSourceFilter bggUserSourceFilter; | |||||
| @Inject private GeeklistSourceFilter geeklistSourceFilter; | |||||
| @PostConstruct | @PostConstruct | ||||
| public void createControls(Composite parent) { | public void createControls(Composite parent) { | ||||
| @@ -82,8 +86,8 @@ public class LoadFromBggPart { | |||||
| cbSource.setInput(sources); | cbSource.setInput(sources); | ||||
| // TODO: implement all the sources | // TODO: implement all the sources | ||||
| cbSource.setSelection(new StructuredSelection(sources.get(0))); | |||||
| cbSource.setSelection(new StructuredSelection(configManager.getResultConfig().source)); | |||||
| // listener is configured further below | |||||
| // choose the bgg sub-site | // choose the bgg sub-site | ||||
| @@ -91,8 +95,8 @@ public class LoadFromBggPart { | |||||
| lblSubtype.setText("Subtypes: "); | lblSubtype.setText("Subtypes: "); | ||||
| lblSubtype.setLayoutData(new GridData(SWT.RIGHT, SWT.FILL, false, false)); | lblSubtype.setLayoutData(new GridData(SWT.RIGHT, SWT.FILL, false, false)); | ||||
| ThingFilterGroup gSubtypes = new ThingFilterGroup(); | |||||
| gSubtypes.create(dlConfigGroup); | |||||
| SubtypeGroup gSubtypes = new SubtypeGroup(); | |||||
| gSubtypes.create(dlConfigGroup, eventBroker, configManager); | |||||
| // choose action on result list | // choose action on result list | ||||
| Label lblAct = new Label(dlConfigGroup, SWT.LEFT); | Label lblAct = new Label(dlConfigGroup, SWT.LEFT); | ||||
| @@ -105,24 +109,29 @@ public class LoadFromBggPart { | |||||
| ResultAction.ADD, ResultAction.REP, ResultAction.SUB, | ResultAction.ADD, ResultAction.REP, ResultAction.SUB, | ||||
| ResultAction.AND, ResultAction.MIS }); | ResultAction.AND, ResultAction.MIS }); | ||||
| cbAct.setInput(actions); | cbAct.setInput(actions); | ||||
| cbAct.setSelection(new StructuredSelection(actions.get(0))); | |||||
| cbAct.setSelection(new StructuredSelection(configManager.getResultConfig().action)); | |||||
| cbAct.addSelectionChangedListener(new ISelectionChangedListener() { | |||||
| @Override | |||||
| public void selectionChanged(SelectionChangedEvent event) { | |||||
| IStructuredSelection selection = (IStructuredSelection) event.getSelection(); | |||||
| eventBroker.send(EventConstants.TOPIC_ACTION_CHANGED, selection.getFirstElement()); | |||||
| } | |||||
| }); | |||||
| // area to display filter controls in | // area to display filter controls in | ||||
| Group gFilters = new Group(main, SWT.SHADOW_ETCHED_IN); | Group gFilters = new Group(main, SWT.SHADOW_ETCHED_IN); | ||||
| gFilters.setText(""); | gFilters.setText(""); | ||||
| gFilters.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false)); | gFilters.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false)); | ||||
| showFilter(gFilters, (IStructuredSelection)cbSource.getSelection()); // set content to initial selection | |||||
| showFilter(gFilters, (IStructuredSelection)cbSource.getSelection()); // set content to initial selection | |||||
| cbSource.addSelectionChangedListener(new ISelectionChangedListener() { // later, its content will be set via the dropdown | cbSource.addSelectionChangedListener(new ISelectionChangedListener() { // later, its content will be set via the dropdown | ||||
| @Override | @Override | ||||
| public void selectionChanged(SelectionChangedEvent event) { | public void selectionChanged(SelectionChangedEvent event) { | ||||
| IStructuredSelection selection = (IStructuredSelection) event | |||||
| .getSelection(); | |||||
| if (selection.size() > 0) { | |||||
| // ASK: this is strange to me. Why is filterComposite known INSIDE a free function? | |||||
| showFilter(gFilters, selection); | |||||
| } | |||||
| IStructuredSelection selection = (IStructuredSelection) event.getSelection(); | |||||
| // ASK: this is strange to me. Why is filterComposite known INSIDE a free function? | |||||
| showFilter(gFilters, selection); | |||||
| eventBroker.send(EventConstants.TOPIC_SOURCE_CHANGED, selection.getFirstElement()); | |||||
| } | } | ||||
| }); | }); | ||||
| @@ -152,14 +161,14 @@ public class LoadFromBggPart { | |||||
| if(selection.size() == 0) return; | if(selection.size() == 0) return; | ||||
| if(selection.getFirstElement() == SourceFilter.BGG_USER) { | if(selection.getFirstElement() == SourceFilter.BGG_USER) { | ||||
| String user = resultConfigManager.getResultConfig().user; | |||||
| String user = configManager.getResultConfig().user; | |||||
| if(user == null || user.isEmpty()) { | if(user == null || user.isEmpty()) { | ||||
| System.out.println("Please enter a user name."); | System.out.println("Please enter a user name."); | ||||
| return; | return; | ||||
| } | } | ||||
| System.out.println("...for user '" + user + "'"); | System.out.println("...for user '" + user + "'"); | ||||
| } else if(selection.getFirstElement() == SourceFilter.GEEKLIST) { | } else if(selection.getFirstElement() == SourceFilter.GEEKLIST) { | ||||
| System.out.println("...for geeklist id '" + GeeklistSourceFilter.getGeeklistId() + "'"); | |||||
| System.out.println("...for geeklist id '" + configManager.getResultConfig().geeklistId + "'"); | |||||
| } else if(selection.getFirstElement() == SourceFilter.FAMILY) { | } else if(selection.getFirstElement() == SourceFilter.FAMILY) { | ||||
| System.out.println("...for family id '" + FamilySourceFilter.getFamilyId() + "'"); | System.out.println("...for family id '" + FamilySourceFilter.getFamilyId() + "'"); | ||||
| } | } | ||||
| @@ -185,12 +194,11 @@ public class LoadFromBggPart { | |||||
| switch(elem) { | switch(elem) { | ||||
| case BGG_USER: | case BGG_USER: | ||||
| System.out.println("construct " + elem); | System.out.println("construct " + elem); | ||||
| BggUserSourceFilter f = new BggUserSourceFilter(); | |||||
| f.create(parent, SWT.FILL); | |||||
| bggUserSourceFilter.create(parent, SWT.FILL); | |||||
| break; | break; | ||||
| case GEEKLIST: | case GEEKLIST: | ||||
| System.out.println("construct " + elem); | System.out.println("construct " + elem); | ||||
| GeeklistSourceFilter.create(parent, SWT.FILL); | |||||
| geeklistSourceFilter.create(parent, SWT.FILL); | |||||
| break; | break; | ||||
| case FAMILY: | case FAMILY: | ||||
| System.out.println("construct " + elem); | System.out.println("construct " + elem); | ||||