| @@ -16,6 +16,7 @@ Require-Bundle: org.eclipse.core.runtime, | |||
| javax.inject | |||
| Automatic-Module-Name: de.wt.secondtry | |||
| Bundle-RequiredExecutionEnvironment: JavaSE-1.8 | |||
| Import-Package: javax.inject;version="1.0.0", | |||
| Import-Package: com.google.gson;version="2.8.2", | |||
| javax.inject;version="1.0.0", | |||
| org.eclipse.e4.ui.model.application.descriptor.basic, | |||
| org.eclipse.e4.ui.model.application.ui.basic | |||
| @@ -0,0 +1,80 @@ | |||
| <?xml version="1.0" encoding="UTF-8"?> | |||
| <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | |||
| xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> | |||
| <modelVersion>4.0.0</modelVersion> | |||
| <groupId>xyz.veronie.bgg</groupId> | |||
| <artifactId>xyz.veronie.bgg.ui</artifactId> | |||
| <version>0.0.1-SNAPSHOT</version> | |||
| <name>xyz.veronie.bgg.ui2</name> | |||
| <!-- FIXME change it to the project's website --> | |||
| <url>http://www.example.com</url> | |||
| <properties> | |||
| <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> | |||
| <maven.compiler.source>1.7</maven.compiler.source> | |||
| <maven.compiler.target>1.7</maven.compiler.target> | |||
| </properties> | |||
| <dependencies> | |||
| <dependency> | |||
| <groupId>com.google.code.gson</groupId> | |||
| <artifactId>gson</artifactId> | |||
| <version>2.8.6</version> | |||
| </dependency> | |||
| <dependency> | |||
| <groupId>junit</groupId> | |||
| <artifactId>junit</artifactId> | |||
| <version>4.11</version> | |||
| <scope>test</scope> | |||
| </dependency> | |||
| </dependencies> | |||
| <build> | |||
| <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) --> | |||
| <plugins> | |||
| <!-- clean lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#clean_Lifecycle --> | |||
| <plugin> | |||
| <artifactId>maven-clean-plugin</artifactId> | |||
| <version>3.1.0</version> | |||
| </plugin> | |||
| <!-- default lifecycle, jar packaging: see https://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_jar_packaging --> | |||
| <plugin> | |||
| <artifactId>maven-resources-plugin</artifactId> | |||
| <version>3.0.2</version> | |||
| </plugin> | |||
| <plugin> | |||
| <artifactId>maven-compiler-plugin</artifactId> | |||
| <version>3.8.0</version> | |||
| </plugin> | |||
| <plugin> | |||
| <artifactId>maven-surefire-plugin</artifactId> | |||
| <version>2.22.1</version> | |||
| </plugin> | |||
| <plugin> | |||
| <artifactId>maven-jar-plugin</artifactId> | |||
| <version>3.0.2</version> | |||
| </plugin> | |||
| <plugin> | |||
| <artifactId>maven-install-plugin</artifactId> | |||
| <version>2.5.2</version> | |||
| </plugin> | |||
| <plugin> | |||
| <artifactId>maven-deploy-plugin</artifactId> | |||
| <version>2.8.2</version> | |||
| </plugin> | |||
| <!-- site lifecycle, see https://maven.apache.org/ref/current/maven-core/lifecycles.html#site_Lifecycle --> | |||
| <plugin> | |||
| <artifactId>maven-site-plugin</artifactId> | |||
| <version>3.7.1</version> | |||
| </plugin> | |||
| <plugin> | |||
| <artifactId>maven-project-info-reports-plugin</artifactId> | |||
| <version>3.0.0</version> | |||
| </plugin> | |||
| </plugins> | |||
| </pluginManagement> | |||
| </build> | |||
| </project> | |||
| @@ -28,6 +28,7 @@ import org.xml.sax.InputSource; | |||
| import org.xml.sax.SAXException; | |||
| import xyz.veronie.bgg.types.EventConstants; | |||
| import xyz.veronie.bgg.types.FamilyType; | |||
| import xyz.veronie.bgg.types.FilterFlagState; | |||
| import xyz.veronie.bgg.types.Subtype; | |||
| import xyz.veronie.bgg.types.UserFlag; | |||
| @@ -99,6 +100,10 @@ public class BggApi { | |||
| StringBuilder urlStr = new StringBuilder(); | |||
| urlStr.append(BASE_URL + FAMILY + "?id=" + String.valueOf(resultConfig.familyId)); | |||
| if(resultConfig.familyType != FamilyType.ALL) { | |||
| urlStr.append("?type=" + resultConfig.familyType); | |||
| } | |||
| return getThings(urlStr.toString()); | |||
| } | |||
| @@ -2,6 +2,7 @@ package xyz.veronie.bgg.result; | |||
| import java.util.HashMap; | |||
| import xyz.veronie.bgg.types.FamilyType; | |||
| import xyz.veronie.bgg.types.FilterFlagState; | |||
| import xyz.veronie.bgg.types.ResultAction; | |||
| import xyz.veronie.bgg.types.SourceFilter; | |||
| @@ -32,6 +33,7 @@ public class ResultConfig { | |||
| public Integer geeklistId = null; | |||
| public Integer familyId = null; | |||
| public FamilyType familyType = FamilyType.ALL; | |||
| // TODO: add others | |||
| @@ -9,6 +9,7 @@ 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.FamilyType; | |||
| import xyz.veronie.bgg.types.ResultAction; | |||
| import xyz.veronie.bgg.types.SourceFilter; | |||
| import xyz.veronie.bgg.types.Subtype; | |||
| @@ -94,6 +95,15 @@ public class ResultConfigManager { | |||
| System.out.println("TOPIC_FAMILY_CHANGED: geeklistId = " + id); | |||
| } | |||
| @Inject | |||
| @Optional | |||
| private void subscribeTopicResultFamilyChanged | |||
| (@UIEventTopic(EventConstants.TOPIC_FAMILYTYPE_CHANGED) | |||
| FamilyType ft) { | |||
| getResultConfig().familyType = ft; | |||
| System.out.println("TOPIC_FAMILYTYPE_CHANGED: family type = " + ft); | |||
| } | |||
| public ResultConfig getResultConfig() { | |||
| return resultConfig; | |||
| } | |||
| @@ -2,9 +2,11 @@ package xyz.veronie.bgg.result; | |||
| import java.beans.PropertyChangeListener; | |||
| import java.beans.PropertyChangeSupport; | |||
| import com.google.gson.Gson; | |||
| public class ThingMetaData { | |||
| public class ThingMetaData implements java.io.Serializable { | |||
| private static final long serialVersionUID = -5268898737006538509L; | |||
| private int id; | |||
| private String name; | |||
| private String imgURL; | |||
| @@ -12,7 +14,7 @@ public class ThingMetaData { | |||
| private String comment; | |||
| private Integer numPlays; | |||
| private static String[] titles = { "Id", "Name" }; //, "Image", "Thumb", "comment", "# plays"}; | |||
| private static String[] titles = { "Id", "Name" }; | |||
| private PropertyChangeSupport propertyChangeSupport = new PropertyChangeSupport(this); | |||
| @@ -55,25 +57,9 @@ public class ThingMetaData { | |||
| case 1: | |||
| returnStr = this.name; | |||
| break; | |||
| // case 2: | |||
| // returnStr = this.imgURL; | |||
| // break; | |||
| // case 3: | |||
| // returnStr = this.thumbURL; | |||
| // break; | |||
| // case 4: | |||
| // returnStr = this.comment; | |||
| // break; | |||
| // case 5: | |||
| // if (this.numPlays == null) { | |||
| // returnStr = ""; | |||
| // } else { | |||
| // returnStr = String.valueOf(this.numPlays); | |||
| // } | |||
| // break; | |||
| default: | |||
| throw new ArrayIndexOutOfBoundsException( | |||
| "idx " + String.valueOf(idx) + " must be in [0," + (titles.length-1) + "]"); | |||
| "idx " + String.valueOf(idx) + " must be in [0,1]"); | |||
| } | |||
| return returnStr; | |||
| @@ -137,8 +123,12 @@ public class ThingMetaData { | |||
| @Override | |||
| public String toString() { | |||
| return String.valueOf(id); | |||
| //return String.valueOf(id); | |||
| Gson gson = new Gson(); | |||
| return gson.toJson(this); | |||
| } | |||
| } | |||
| @@ -1,40 +1,67 @@ | |||
| package xyz.veronie.bgg.result; | |||
| import java.io.BufferedWriter; | |||
| import java.io.FileWriter; | |||
| import java.io.IOException; | |||
| import java.util.ArrayList; | |||
| import java.util.List; | |||
| import java.util.function.Predicate; | |||
| import javax.inject.Inject; | |||
| import org.eclipse.e4.core.di.annotations.Optional; | |||
| import org.eclipse.e4.ui.di.UIEventTopic; | |||
| import com.google.gson.Gson; | |||
| import xyz.veronie.bgg.types.EventConstants; | |||
| import xyz.veronie.bgg.types.SourceFilter; | |||
| public enum ThingProvider { | |||
| INSTANCE; | |||
| /// list of things. Each ID is expected to exist exactly once. | |||
| private List<ThingMetaData> thingMetas; | |||
| private ThingProvider() { | |||
| thingMetas = new ArrayList<ThingMetaData>(); | |||
| } | |||
| /// replace current list with new list | |||
| public void replaceThingMetas(ArrayList<ThingMetaData> metas) { | |||
| this.thingMetas = metas; | |||
| } | |||
| /// add things from argument to current list iff their ID does not exist yet | |||
| public void addThingMetas(ArrayList<ThingMetaData> metas) { | |||
| this.thingMetas.addAll(metas); | |||
| for(ThingMetaData tmd : metas) { | |||
| Boolean exists = false; | |||
| for(ThingMetaData thisTmd : this.thingMetas) { | |||
| if(tmd.getId() == thisTmd.getId()) { | |||
| exists = true; | |||
| } | |||
| } | |||
| if(!exists) { | |||
| this.thingMetas.add(tmd); | |||
| } | |||
| } | |||
| } | |||
| public static Predicate<ThingMetaData> thingEqual(ThingMetaData other) | |||
| // helper functino for subtractThingMetas | |||
| private static Predicate<ThingMetaData> thingEqual(ThingMetaData other) | |||
| { | |||
| return p -> p.getId() == other.getId(); | |||
| } | |||
| /// remove the things in the argument from the current list of things (using their ID) | |||
| public void subtractThingMetas(ArrayList<ThingMetaData> metas) { | |||
| for(ThingMetaData tmd : metas) { | |||
| this.thingMetas.removeIf(thingEqual(tmd)); | |||
| } | |||
| } | |||
| /// keep only things that exist in both argument list and current list (by ID) | |||
| public void intersectThingMetas(ArrayList<ThingMetaData> metas) { | |||
| List<ThingMetaData> cpMetas = new ArrayList<ThingMetaData>(this.thingMetas); | |||
| this.thingMetas.clear(); | |||
| @@ -47,8 +74,35 @@ public enum ThingProvider { | |||
| } | |||
| } | |||
| /// create a tag of the current list | |||
| public void tagResult() { | |||
| Gson gson = new Gson(); | |||
| String resultList = gson.toJson(this.thingMetas); | |||
| try { | |||
| BufferedWriter writer = new BufferedWriter( | |||
| new FileWriter("result_" + Long.toString(System.currentTimeMillis()))); | |||
| writer.write(resultList); | |||
| writer.close(); | |||
| } catch (IOException e) { | |||
| e.printStackTrace(); | |||
| } | |||
| } | |||
| // return the current list of ids | |||
| public List<ThingMetaData> getThingMetas() { | |||
| return thingMetas; | |||
| } | |||
| @Inject | |||
| @Optional | |||
| private void subscribeTopicSourceChanged | |||
| (@UIEventTopic(EventConstants.TOPIC_TAG_RESULT) | |||
| String str) { | |||
| System.out.println("Tag result now."); | |||
| this.tagResult(); | |||
| } | |||
| } | |||
| @@ -18,6 +18,8 @@ public interface EventConstants { | |||
| String TOPIC_FAMILY_CHANGED = "CONFIG_CHANGED/FAMILY"; | |||
| String TOPIC_FAMILYTYPE_CHANGED = "CONFIG_CHANGED/FAMILYTYPE"; | |||
| String TOPIC_RESULT_CHANGED = "RESULT_CHANGED"; | |||
| String TOPIC_STATUS = "STATUS"; | |||
| @@ -26,4 +28,7 @@ public interface EventConstants { | |||
| String TOPIC_FAMILY_INFO = "INFO/FAMILY"; | |||
| String TOPIC_TAG_RESULT = "EVENT_TAG_RESULT"; | |||
| } | |||
| @@ -0,0 +1,26 @@ | |||
| package xyz.veronie.bgg.types; | |||
| public enum FamilyType { | |||
| ALL("any", ""), | |||
| BG_FAMILY("board game family", "boardgamefamily"), | |||
| RPG("RPG", "rpg"), | |||
| RPG_PERIODIC("RPG periodical", "rpgperiodical"); | |||
| private String name; //< the display name | |||
| private String familyApiString; //< the THINGTYPE string for BGG XMLAPI2 | |||
| private FamilyType(String name, String familyApiString) { | |||
| this.name = name; | |||
| this.familyApiString = familyApiString; | |||
| } | |||
| @Override | |||
| public String toString() { | |||
| return this.name; | |||
| } | |||
| /// return the string used in BGG XMLAPI2 to identify the thingtype | |||
| public String toApiString() { | |||
| return this.familyApiString; | |||
| } | |||
| } | |||
| @@ -1,5 +1,6 @@ | |||
| package xyz.veronie.bgg.ui.filters; | |||
| import java.util.ArrayList; | |||
| import java.util.Arrays; | |||
| import java.util.List; | |||
| @@ -28,8 +29,10 @@ import org.eclipse.swt.widgets.Label; | |||
| import xyz.veronie.bgg.result.ResultConfigManager; | |||
| import xyz.veronie.bgg.types.EventConstants; | |||
| import xyz.veronie.bgg.types.FilterFlagState; | |||
| import xyz.veronie.bgg.types.Subtype; | |||
| import xyz.veronie.bgg.types.UserFlag; | |||
| import xyz.veronie.bgg.types.UserFlagEvent; | |||
| import xyz.veronie.bgg.ui.helpers.CommonControls; | |||
| @@ -46,7 +49,7 @@ public class BggUserSourceFilter { | |||
| public void create(Composite parent, int style) { | |||
| GridLayout filterLayout = new GridLayout(4, false); | |||
| GridLayout filterLayout = new GridLayout(5, false); | |||
| parent.setLayout(filterLayout); | |||
| Label lblUser = new Label(parent, SWT.LEFT); | |||
| @@ -87,36 +90,67 @@ public class BggUserSourceFilter { | |||
| } | |||
| }); | |||
| Button btEditUsers = new Button(parent, SWT.PUSH); | |||
| btEditUsers.setText("edit users"); | |||
| btEditUsers.setEnabled(false); | |||
| btEditUsers.setVisible(false); | |||
| btEditUsers.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false)); | |||
| // Button btEditUsers = new Button(parent, SWT.PUSH); | |||
| // btEditUsers.setText("edit users"); | |||
| // btEditUsers.setEnabled(false); | |||
| // btEditUsers.setVisible(false); | |||
| // btEditUsers.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false)); | |||
| // TODO: implement edit users | |||
| CommonControls.makeEmptySpace(parent, 1); | |||
| // choose the thing sub-type | |||
| Label lblSubtype = new Label(parent, SWT.LEFT); | |||
| lblSubtype.setText("Subtypes: "); | |||
| lblSubtype.setLayoutData(new GridData(SWT.RIGHT, SWT.FILL, false, false)); | |||
| ComboViewer cbSubtypes = new ComboViewer(parent, SWT.READ_ONLY); | |||
| cbSubtypes.getCombo().setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false)); | |||
| cbSubtypes.setContentProvider(ArrayContentProvider.getInstance()); | |||
| List<Subtype> subtypes = new ArrayList<Subtype>(); | |||
| for (Subtype st : Subtype.values()) { | |||
| subtypes.add(st); | |||
| } | |||
| cbSubtypes.setInput(subtypes); | |||
| cbSubtypes.setSelection(new StructuredSelection(configManager.getResultConfig().subtype)); | |||
| cbSubtypes.addSelectionChangedListener(new ISelectionChangedListener() { | |||
| @Override | |||
| public void selectionChanged(SelectionChangedEvent event) { | |||
| IStructuredSelection selection = (IStructuredSelection) event.getSelection(); | |||
| eventBroker.send(EventConstants.TOPIC_SUBTYPE_CHANGED, selection.getFirstElement()); | |||
| } | |||
| }); | |||
| Label infoLabel = new Label(parent, 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 = 4; | |||
| gdInfo.horizontalSpan = 5; | |||
| infoLabel.setLayoutData(gdInfo); | |||
| makeFilter(parent, UserFlag.OWN); | |||
| makeFilter(parent, UserFlag.WTP); | |||
| CommonControls.makeEmptySpace(parent, 1); | |||
| makeFilter(parent, UserFlag.PREVIOUSLY_OWNED); | |||
| makeFilter(parent, UserFlag.WTB); | |||
| CommonControls.makeEmptySpace(parent, 1); | |||
| makeFilter(parent, UserFlag.TRADE); | |||
| makeFilter(parent, UserFlag.WISHLIST); | |||
| CommonControls.makeEmptySpace(parent, 1); | |||
| makeFilter(parent, UserFlag.WANT); | |||
| makeFilter(parent, UserFlag.PREORDERED); | |||
| CommonControls.makeEmptySpace(parent, 1); | |||
| makeFilter(parent, UserFlag.RATED); | |||
| makeFilter(parent, UserFlag.COMMENT); | |||
| CommonControls.makeEmptySpace(parent, 1); | |||
| makeFilter(parent, UserFlag.PLAYED); | |||
| parent.pack(); | |||
| parent.getParent().pack(); | |||
| parent.layout(); | |||
| @@ -1,5 +1,8 @@ | |||
| package xyz.veronie.bgg.ui.filters; | |||
| import java.util.ArrayList; | |||
| import java.util.List; | |||
| import javax.inject.Inject; | |||
| import org.eclipse.e4.core.di.annotations.Creatable; | |||
| @@ -7,6 +10,12 @@ import org.eclipse.e4.core.di.annotations.Optional; | |||
| import org.eclipse.e4.core.services.events.IEventBroker; | |||
| import org.eclipse.e4.ui.di.UIEventTopic; | |||
| import org.eclipse.jface.dialogs.MessageDialog; | |||
| 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.custom.StyledText; | |||
| import org.eclipse.swt.events.FocusEvent; | |||
| @@ -21,6 +30,7 @@ import org.eclipse.swt.widgets.Label; | |||
| import xyz.veronie.bgg.result.ResultConfigManager; | |||
| import xyz.veronie.bgg.types.EventConstants; | |||
| import xyz.veronie.bgg.types.FamilyType; | |||
| /// These are the controls to retrieve thing IDs for a given family ID | |||
| @Creatable | |||
| @@ -45,7 +55,7 @@ public class FamilySourceFilter { | |||
| if(fid != null) { | |||
| cbFamilyId.setText(Integer.toString(fid)); | |||
| } | |||
| cbFamilyId.addSelectionListener(new SelectionAdapter() { | |||
| public void widgetDefaultSelected(SelectionEvent e) { | |||
| try { | |||
| @@ -78,6 +88,28 @@ public class FamilySourceFilter { | |||
| } | |||
| }); | |||
| Label lblFamilyType = new Label(parent, SWT.LEFT); | |||
| lblFamilyType.setText("Family Type: "); | |||
| lblFamilyType.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false)); | |||
| ComboViewer cbSubtypes = new ComboViewer(parent, SWT.READ_ONLY); | |||
| cbSubtypes.getCombo().setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false)); | |||
| cbSubtypes.setContentProvider(ArrayContentProvider.getInstance()); | |||
| List<FamilyType> subtypes = new ArrayList<FamilyType>(); | |||
| for (FamilyType ft : FamilyType.values()) { | |||
| subtypes.add(ft); | |||
| } | |||
| cbSubtypes.setInput(subtypes); | |||
| cbSubtypes.setSelection(new StructuredSelection(configManager.getResultConfig().familyType)); | |||
| cbSubtypes.addSelectionChangedListener(new ISelectionChangedListener() { | |||
| @Override | |||
| public void selectionChanged(SelectionChangedEvent event) { | |||
| IStructuredSelection selection = (IStructuredSelection) event.getSelection(); | |||
| eventBroker.send(EventConstants.TOPIC_FAMILYTYPE_CHANGED, selection.getFirstElement()); | |||
| } | |||
| }); | |||
| confLabel = new StyledText(parent, SWT.MULTI | SWT.READ_ONLY); | |||
| confLabel.setText(""); | |||
| confLabel.setWordWrap(true); | |||
| @@ -0,0 +1,19 @@ | |||
| package xyz.veronie.bgg.ui.helpers; | |||
| import org.eclipse.swt.SWT; | |||
| import org.eclipse.swt.layout.GridData; | |||
| import org.eclipse.swt.widgets.Composite; | |||
| import org.eclipse.swt.widgets.Label; | |||
| public class CommonControls { | |||
| public static void makeEmptySpace(Composite parent, int span) { | |||
| Label empty = new Label(parent, SWT.LEFT); | |||
| empty.setText(""); | |||
| GridData gde = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1); | |||
| if(span > 1) { | |||
| gde.horizontalSpan = span; | |||
| } | |||
| empty.setLayoutData(gde); | |||
| } | |||
| } | |||
| @@ -1,9 +1,12 @@ | |||
| package xyz.veronie.bgg.ui.parts; | |||
| import java.util.List; | |||
| import javax.annotation.PostConstruct; | |||
| import javax.inject.Inject; | |||
| import org.eclipse.e4.core.di.annotations.Optional; | |||
| import org.eclipse.e4.core.services.events.IEventBroker; | |||
| import org.eclipse.e4.ui.di.UIEventTopic; | |||
| import org.eclipse.jface.viewers.ArrayContentProvider; | |||
| import org.eclipse.jface.viewers.ColumnLabelProvider; | |||
| @@ -12,7 +15,9 @@ import org.eclipse.jface.viewers.TableViewerColumn; | |||
| 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.Label; | |||
| import org.eclipse.swt.widgets.Table; | |||
| import org.eclipse.swt.widgets.TableColumn; | |||
| @@ -22,20 +27,35 @@ import xyz.veronie.bgg.types.EventConstants; | |||
| public class BggResultPart { | |||
| private TableViewer viewer; | |||
| private Label statsLabel; | |||
| @Inject private IEventBroker eventBroker; | |||
| @PostConstruct | |||
| public void createControls(Composite parent) { | |||
| Composite main = new Composite(parent, SWT.FILL); | |||
| GridLayout layout = new GridLayout(1, false); | |||
| main.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false)); | |||
| GridLayout layout = new GridLayout(2, false); | |||
| main.setLayout(layout); | |||
| createViewer(main); | |||
| statsLabel = new Label(main, SWT.FILL); | |||
| statsLabel.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false)); | |||
| statsLabel.setText("0 items"); | |||
| Button tagResultButton = new Button(main, SWT.PUSH); | |||
| tagResultButton.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false)); | |||
| tagResultButton.addListener(SWT.SELECTED, event -> { | |||
| eventBroker.post(EventConstants.TOPIC_TAG_RESULT, ""); | |||
| }); | |||
| } | |||
| private void createViewer(Composite parent) { | |||
| viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL | |||
| | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER); | |||
| | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER ); | |||
| createColumns(parent, viewer); | |||
| final Table table = viewer.getTable(); | |||
| table.setHeaderVisible(true); | |||
| @@ -52,10 +72,10 @@ public class BggResultPart { | |||
| // Layout the viewer | |||
| GridData gridData = new GridData(); | |||
| gridData.verticalAlignment = GridData.FILL; | |||
| gridData.horizontalSpan = 2; | |||
| gridData.grabExcessHorizontalSpace = true; | |||
| gridData.grabExcessVerticalSpace = true; | |||
| gridData.horizontalAlignment = GridData.FILL; | |||
| gridData.horizontalSpan = 2; | |||
| viewer.getControl().setLayoutData(gridData); | |||
| } | |||
| @@ -107,8 +127,14 @@ public class BggResultPart { | |||
| (@UIEventTopic(EventConstants.TOPIC_RESULT_CHANGED) | |||
| String empty) { | |||
| System.out.println("TOPIC_RESULT_CHANGED"); | |||
| viewer.setInput(ThingProvider.INSTANCE.getThingMetas()); | |||
| List<ThingMetaData> thingMetas = ThingProvider.INSTANCE.getThingMetas(); | |||
| viewer.setInput(thingMetas); | |||
| viewer.refresh(); | |||
| statsLabel.setText(Integer.toString(thingMetas.size()) + " items"); | |||
| statsLabel.redraw(); | |||
| } | |||
| } | |||
| @@ -42,6 +42,7 @@ import xyz.veronie.bgg.ui.filters.GeeklistSourceFilter; | |||
| import xyz.veronie.bgg.ui.filters.RankSourceFilter; | |||
| import xyz.veronie.bgg.ui.filters.SearchSourceFilter; | |||
| import xyz.veronie.bgg.ui.filters.YearSourceFilter; | |||
| import xyz.veronie.bgg.ui.helpers.CommonControls; | |||
| @@ -98,29 +99,9 @@ public class LoadFromBggPart { | |||
| cbSource.setSelection(new StructuredSelection(configManager.getResultConfig().source)); | |||
| // listener is configured further below | |||
| makeEmptySpace(main, 1); | |||
| CommonControls.makeEmptySpace(main, 3); | |||
| // choose the thing sub-type | |||
| Label lblSubtype = new Label(main, SWT.LEFT); | |||
| lblSubtype.setText("Subtypes: "); | |||
| lblSubtype.setLayoutData(new GridData(SWT.RIGHT, SWT.FILL, false, false)); | |||
| ComboViewer cbSubtypes = new ComboViewer(main, SWT.READ_ONLY); | |||
| cbSubtypes.getCombo().setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false)); | |||
| cbSubtypes.setContentProvider(ArrayContentProvider.getInstance()); | |||
| List<Subtype> subtypes = new ArrayList<Subtype>(); | |||
| for (Subtype st : Subtype.values()) { | |||
| subtypes.add(st); | |||
| } | |||
| cbSubtypes.setInput(subtypes); | |||
| cbSubtypes.setSelection(new StructuredSelection(configManager.getResultConfig().subtype)); | |||
| cbSubtypes.addSelectionChangedListener(new ISelectionChangedListener() { | |||
| @Override | |||
| public void selectionChanged(SelectionChangedEvent event) { | |||
| IStructuredSelection selection = (IStructuredSelection) event.getSelection(); | |||
| eventBroker.send(EventConstants.TOPIC_SUBTYPE_CHANGED, selection.getFirstElement()); | |||
| } | |||
| }); | |||
| @@ -147,7 +128,7 @@ public class LoadFromBggPart { | |||
| // next row: | |||
| makeEmptySpace(main, 5); | |||
| CommonControls.makeEmptySpace(main, 5); | |||
| // next row | |||
| @@ -242,7 +223,7 @@ public class LoadFromBggPart { | |||
| ComboViewer cbAct = new ComboViewer(main, SWT.READ_ONLY); | |||
| GridData gdact = new GridData(SWT.FILL, SWT.FILL, false, false); | |||
| cbSubtypes.getCombo().setLayoutData(gdact); | |||
| cbAct.getCombo().setLayoutData(gdact); | |||
| cbAct.setContentProvider(ArrayContentProvider.getInstance()); | |||
| List<ResultAction> actions = new ArrayList<ResultAction>(); | |||
| for(ResultAction act : ResultAction.values()) { | |||
| @@ -331,14 +312,5 @@ public class LoadFromBggPart { | |||
| } | |||
| public void makeEmptySpace(Composite parent, int span) { | |||
| Label empty = new Label(parent, SWT.LEFT); | |||
| empty.setText(""); | |||
| GridData gde = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1); | |||
| if(span > 1) { | |||
| gde.horizontalSpan = span; | |||
| } | |||
| empty.setLayoutData(gde); | |||
| } | |||
| } | |||
| @@ -1,5 +1,22 @@ | |||
| package xyz.veronie.bgg.ui.parts; | |||
| import javax.annotation.PostConstruct; | |||
| import org.eclipse.swt.SWT; | |||
| import org.eclipse.swt.layout.GridData; | |||
| import org.eclipse.swt.layout.GridLayout; | |||
| import org.eclipse.swt.widgets.Composite; | |||
| public class LoadThingDetailsPart { | |||
| @PostConstruct | |||
| public void createControls(Composite parent) { | |||
| Composite main = new Composite(parent, SWT.FILL); | |||
| main.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false)); | |||
| GridLayout layout = new GridLayout(5, false); | |||
| main.setLayout(layout); | |||
| } | |||
| } | |||
| @@ -7,16 +7,11 @@ import javax.inject.Inject; | |||
| import org.eclipse.e4.core.di.annotations.Optional; | |||
| import org.eclipse.e4.ui.di.UIEventTopic; | |||
| import org.eclipse.jface.resource.ColorDescriptor; | |||
| import org.eclipse.jface.resource.DeviceResourceException; | |||
| import org.eclipse.jface.resource.JFaceResources; | |||
| import org.eclipse.jface.resource.LocalResourceManager; | |||
| import org.eclipse.jface.resource.ResourceManager; | |||
| import org.eclipse.swt.SWT; | |||
| import org.eclipse.swt.graphics.Color; | |||
| import org.eclipse.swt.graphics.Device; | |||
| import org.eclipse.swt.graphics.RGB; | |||
| import org.eclipse.swt.layout.FillLayout; | |||
| import org.eclipse.swt.layout.GridData; | |||
| import org.eclipse.swt.layout.GridLayout; | |||
| import org.eclipse.swt.widgets.Composite; | |||
| @@ -38,6 +33,7 @@ public class StatusBar { | |||
| statusLabel.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); | |||
| // create the manager and bind to a widget | |||
| // TODO: do I have to free the color? how? | |||
| ResourceManager resManager = | |||
| new LocalResourceManager(JFaceResources.getResources(), statusLabel); | |||
| statusLabel.setBackground(resManager.createColor(new RGB(255,255,0))); | |||
| @@ -0,0 +1,4 @@ | |||
| #Created by Apache Maven 3.6.3 | |||
| version=0.0.1-SNAPSHOT | |||
| groupId=xyz.veronie.bgg | |||
| artifactId=xyz.veronie.bgg.ui | |||