Started to work on detailed view. Need sqlite driver (maven? gradle? bnd?)pull/2/head
| @@ -7,6 +7,11 @@ | |||||
| <children xsi:type="basic:PartStack" xmi:id="_7KNiwEqTEeqT5sxfmvJ5Tg" elementId="xyz.veronie.bgg.ui.partstack.leftupper" containerData="800"> | <children xsi:type="basic:PartStack" xmi:id="_7KNiwEqTEeqT5sxfmvJ5Tg" elementId="xyz.veronie.bgg.ui.partstack.leftupper" containerData="800"> | ||||
| <children xsi:type="basic:Part" xmi:id="_9ocfwEqTEeqT5sxfmvJ5Tg" elementId="xyz.veronie.bgg.ui.part.resultconfig" contributionURI="bundleclass://xyz.veronie.bgg.ui/xyz.veronie.bgg.ui.parts.PreparePart" label="Prepare"/> | <children xsi:type="basic:Part" xmi:id="_9ocfwEqTEeqT5sxfmvJ5Tg" elementId="xyz.veronie.bgg.ui.part.resultconfig" contributionURI="bundleclass://xyz.veronie.bgg.ui/xyz.veronie.bgg.ui.parts.PreparePart" label="Prepare"/> | ||||
| </children> | </children> | ||||
| <children xsi:type="basic:PartStack" xmi:id="_0MbRQEqTEeqT5sxfmvJ5Tg" elementId="de.wt.bgg.ui.partstack.rightupper" containerData="800"> | |||||
| <children xsi:type="basic:Part" xmi:id="_-Mdy0EqTEeqT5sxfmvJ5Tg" elementId="de.wt.bgg.ui.part.gamesconfig" contributionURI="bundleclass://xyz.veronie.bgg.ui/xyz.veronie.bgg.ui.parts.DownloadThingDetailsPart" label="Download details"/> | |||||
| </children> | |||||
| </children> | |||||
| <children xsi:type="basic:PartSashContainer" xmi:id="_AF1vQEqUEeqT5sxfmvJ5Tg" elementId="xyz.veronie.bgg.ui.partsashcontainer.right"> | |||||
| <children xsi:type="basic:PartStack" xmi:id="_0OB_gJ2wEeqjssfAjxHZ-w" elementId="xyz.veronie.bgg.ui.partstack.leftlower" containerData="800"> | <children xsi:type="basic:PartStack" xmi:id="_0OB_gJ2wEeqjssfAjxHZ-w" elementId="xyz.veronie.bgg.ui.partstack.leftlower" containerData="800"> | ||||
| <children xsi:type="basic:Part" xmi:id="_97XbwEqTEeqT5sxfmvJ5Tg" elementId="xyz.veronie.bgg.ui.part.resulttable" contributionURI="bundleclass://xyz.veronie.bgg.ui/xyz.veronie.bgg.ui.parts.BggResultPart" label="BGG Result"> | <children xsi:type="basic:Part" xmi:id="_97XbwEqTEeqT5sxfmvJ5Tg" elementId="xyz.veronie.bgg.ui.part.resulttable" contributionURI="bundleclass://xyz.veronie.bgg.ui/xyz.veronie.bgg.ui.parts.BggResultPart" label="BGG Result"> | ||||
| <toolbar xmi:id="_ZZOF8J3AEeqjssfAjxHZ-w" elementId="xyz.veronie.bgg.ui.toolbar.0"> | <toolbar xmi:id="_ZZOF8J3AEeqjssfAjxHZ-w" elementId="xyz.veronie.bgg.ui.toolbar.0"> | ||||
| @@ -15,12 +20,7 @@ | |||||
| </toolbar> | </toolbar> | ||||
| </children> | </children> | ||||
| </children> | </children> | ||||
| </children> | |||||
| <children xsi:type="basic:PartSashContainer" xmi:id="_AF1vQEqUEeqT5sxfmvJ5Tg" elementId="xyz.veronie.bgg.ui.partsashcontainer.right"> | |||||
| <children xsi:type="basic:PartStack" xmi:id="_0MbRQEqTEeqT5sxfmvJ5Tg" elementId="de.wt.bgg.ui.partstack.rightupper" containerData="800"> | |||||
| <children xsi:type="basic:Part" xmi:id="_-Mdy0EqTEeqT5sxfmvJ5Tg" elementId="de.wt.bgg.ui.part.gamesconfig" contributionURI="bundleclass://xyz.veronie.bgg.ui/xyz.veronie.bgg.ui.parts.DownloadThingDetailsPart" label="Download games"/> | |||||
| </children> | |||||
| <children xsi:type="basic:PartStack" xmi:id="_2M6HAJ2wEeqjssfAjxHZ-w" elementId="xyz.veronie.bgg.ui.rightlower" containerData="800"> | |||||
| <children xsi:type="basic:PartStack" xmi:id="_2M6HAJ2wEeqjssfAjxHZ-w" elementId="xyz.veronie.bgg.ui.rightlower" containerData="200"> | |||||
| <children xsi:type="basic:Part" xmi:id="_Ckm3wEqUEeqT5sxfmvJ5Tg" elementId="de.wt.bgg.ui.part.gamestable" contributionURI="bundleclass://xyz.veronie.bgg.ui/xyz.veronie.bgg.ui.parts.ThingListPart" label="Games list"/> | <children xsi:type="basic:Part" xmi:id="_Ckm3wEqUEeqT5sxfmvJ5Tg" elementId="de.wt.bgg.ui.part.gamestable" contributionURI="bundleclass://xyz.veronie.bgg.ui/xyz.veronie.bgg.ui.parts.ThingListPart" label="Games list"/> | ||||
| </children> | </children> | ||||
| </children> | </children> | ||||
| @@ -15,11 +15,12 @@ public class LocalDbAdapterService { | |||||
| } | } | ||||
| private void initDb() { | private void initDb() { | ||||
| File dbFile = new File(SqliteController.DB_PATH); | |||||
| sqliteController = SqliteController.getInstance(); | |||||
| File dbFile = sqliteController.getDbPath().toFile(); | |||||
| if(!dbFile.exists()) { | if(!dbFile.exists()) { | ||||
| SqliteController.getInstance().createSchema(); | |||||
| sqliteController.createSchema(); | |||||
| } | } | ||||
| sqliteController = SqliteController.getInstance(); | |||||
| } | } | ||||
| @@ -1,5 +1,8 @@ | |||||
| package xyz.veronie.bgg.localdb; | package xyz.veronie.bgg.localdb; | ||||
| import java.io.File; | |||||
| import java.nio.file.Path; | |||||
| import java.nio.file.Paths; | |||||
| import java.sql.Connection; | import java.sql.Connection; | ||||
| import java.sql.DriverManager; | import java.sql.DriverManager; | ||||
| import java.sql.PreparedStatement; | import java.sql.PreparedStatement; | ||||
| @@ -10,12 +13,13 @@ import java.util.List; | |||||
| import xyz.veronie.bgg.result.Thing; | import xyz.veronie.bgg.result.Thing; | ||||
| import xyz.veronie.bgg.result.ThingMetaData; | import xyz.veronie.bgg.result.ThingMetaData; | ||||
| import xyz.veronie.bgg.ui.helpers.Resources; | |||||
| public class SqliteController { | public class SqliteController { | ||||
| private static final SqliteController dbcontroller = new SqliteController(); | private static final SqliteController dbcontroller = new SqliteController(); | ||||
| private static Connection connection; | private static Connection connection; | ||||
| public static final String DB_PATH = System.getProperty("user.home") + "/" + "bggtool.db"; | |||||
| private String dbPath; | |||||
| static { | static { | ||||
| try { | try { | ||||
| @@ -26,7 +30,12 @@ public class SqliteController { | |||||
| } | } | ||||
| } | } | ||||
| public Path getDbPath() { | |||||
| return Paths.get(dbPath); | |||||
| } | |||||
| private SqliteController() { | private SqliteController() { | ||||
| dbPath = Resources.INSTANCE.getTmpDir() + File.separator + "bggtool.db"; | |||||
| initDBConnection(); | initDBConnection(); | ||||
| } | } | ||||
| @@ -39,12 +48,12 @@ public class SqliteController { | |||||
| if (connection != null) | if (connection != null) | ||||
| return; | return; | ||||
| System.out.println("Creating Connection to Database..."); | System.out.println("Creating Connection to Database..."); | ||||
| String filename = System.getProperty("user.home") + "/bggtool.db"; | |||||
| connection = DriverManager.getConnection("jdbc:sqlite:" + filename); | |||||
| connection = DriverManager.getConnection("jdbc:sqlite:" + dbPath); | |||||
| if (!connection.isClosed()) | if (!connection.isClosed()) | ||||
| System.out.println("...Connection established"); | System.out.println("...Connection established"); | ||||
| } catch (SQLException e) { | } catch (SQLException e) { | ||||
| throw new RuntimeException(e); | |||||
| // throw new RuntimeException(e); | |||||
| System.out.println("Could not init local DB."); | |||||
| } | } | ||||
| Runtime.getRuntime().addShutdownHook(new Thread() { | Runtime.getRuntime().addShutdownHook(new Thread() { | ||||
| @@ -64,17 +73,20 @@ public class SqliteController { | |||||
| public void createSchema() { | public void createSchema() { | ||||
| try { | try { | ||||
| Statement stmt = connection.createStatement(); | |||||
| stmt.executeUpdate("DROP TABLE IF EXISTS Thing;"); | |||||
| stmt.executeUpdate("DROP TABLE IF EXISTS ThingList"); | |||||
| stmt.executeUpdate("DROP TABLE IF EXISTS ThingListToThing"); | |||||
| stmt.executeUpdate("CREATE TABLE Thing (ThingId INTEGER PRIMARY KEY, Name, ImgUrl, ThumbUrl, Comment, NumPlays);"); | |||||
| stmt.executeUpdate("CREATE TABLE ThingList (ListId INTEGER PRIMARY KEY, Name) ON DELETE CASCADE;"); | |||||
| stmt.executeUpdate("CREATE UNIQUE INDEX idx1 ON ThingList(Name)"); | |||||
| stmt.executeUpdate("CREATE TABLE ThingListToThing (ListId, ThingId, FOREIGN KEY (ListId) REFERENCES ThingList(ListId), FOREIGN KEY (ThingId) REFERENCES Thing(ThingId));"); | |||||
| stmt.executeUpdate("CREATE UNIQUE INDEX idx2 ON ThingListToThing(ListId, ThingId)"); | |||||
| if(connection != null) { | |||||
| Statement stmt = connection.createStatement(); | |||||
| stmt.executeUpdate("DROP TABLE IF EXISTS Thing;"); | |||||
| stmt.executeUpdate("DROP TABLE IF EXISTS ThingList"); | |||||
| stmt.executeUpdate("DROP TABLE IF EXISTS ThingListToThing"); | |||||
| stmt.executeUpdate("CREATE TABLE Thing (ThingId INTEGER PRIMARY KEY, Name, ImgUrl, ThumbUrl, Comment, NumPlays);"); | |||||
| stmt.executeUpdate("CREATE TABLE ThingList (ListId INTEGER PRIMARY KEY, Name) ON DELETE CASCADE;"); | |||||
| stmt.executeUpdate("CREATE UNIQUE INDEX idx1 ON ThingList(Name)"); | |||||
| stmt.executeUpdate("CREATE TABLE ThingListToThing (ListId, ThingId, FOREIGN KEY (ListId) REFERENCES ThingList(ListId), FOREIGN KEY (ThingId) REFERENCES Thing(ThingId));"); | |||||
| stmt.executeUpdate("CREATE UNIQUE INDEX idx2 ON ThingListToThing(ListId, ThingId)"); | |||||
| } else { | |||||
| System.err.println("ERROR: Couldn't create Schema, connection is null."); | |||||
| } | |||||
| } catch (SQLException e) { | } catch (SQLException e) { | ||||
| System.err.println("Couldn't create Schema"); | System.err.println("Couldn't create Schema"); | ||||
| e.printStackTrace(); | e.printStackTrace(); | ||||
| @@ -82,6 +94,11 @@ public class SqliteController { | |||||
| } | } | ||||
| public void openThingList(String name) { | public void openThingList(String name) { | ||||
| if(connection == null) { | |||||
| System.err.println("ERROR: Couldn't create Schema, connection is null."); | |||||
| return; | |||||
| } | |||||
| try { | try { | ||||
| Statement stmt = connection.createStatement(); | Statement stmt = connection.createStatement(); | ||||
| // insert new thing list if one with that name does not exist already | // insert new thing list if one with that name does not exist already | ||||
| @@ -93,6 +110,11 @@ public class SqliteController { | |||||
| } | } | ||||
| public void addToThingList(String name, List<Thing> things) { | public void addToThingList(String name, List<Thing> things) { | ||||
| if(connection == null) { | |||||
| System.err.println("ERROR: Couldn't create Schema, connection is null."); | |||||
| return; | |||||
| } | |||||
| try { | try { | ||||
| Statement stmt = connection.createStatement(); | Statement stmt = connection.createStatement(); | ||||
| @@ -14,7 +14,6 @@ import org.eclipse.swt.graphics.Image; | |||||
| import org.eclipse.swt.graphics.ImageData; | import org.eclipse.swt.graphics.ImageData; | ||||
| import org.eclipse.swt.graphics.ImageLoader; | import org.eclipse.swt.graphics.ImageLoader; | ||||
| import xyz.veronie.bgg.ui.helpers.Constants; | |||||
| import xyz.veronie.bgg.ui.helpers.Resources; | import xyz.veronie.bgg.ui.helpers.Resources; | ||||
| public class Thing { | public class Thing { | ||||
| @@ -68,11 +67,12 @@ public class Thing { | |||||
| Path tmpDir = Resources.INSTANCE.getTmpDir(); | Path tmpDir = Resources.INSTANCE.getTmpDir(); | ||||
| if(tmpDir != null) { | if(tmpDir != null) { | ||||
| Path imageFile = Paths.get(Resources.INSTANCE.getThumbsDir().toString() | Path imageFile = Paths.get(Resources.INSTANCE.getThumbsDir().toString() | ||||
| + File.separator + String.valueOf(thingId)); | |||||
| + File.separator + String.valueOf(thingId) + ".png"); | |||||
| if(Files.exists(imageFile, LinkOption.NOFOLLOW_LINKS)) { | if(Files.exists(imageFile, LinkOption.NOFOLLOW_LINKS)) { | ||||
| String filename = imageFile.toString().replace("\\","/"); | |||||
| thumbImage = Resources.INSTANCE.getResourceManager().createImage( | thumbImage = Resources.INSTANCE.getResourceManager().createImage( | ||||
| ImageDescriptor.createFromFile(Thing.class, imageFile.toString())); | |||||
| ImageDescriptor.createFromFile(null, filename)); | |||||
| } else { | } else { | ||||
| try { | try { | ||||
| ImageDescriptor descriptor = ImageDescriptor.createFromURL( | ImageDescriptor descriptor = ImageDescriptor.createFromURL( | ||||
| @@ -0,0 +1,74 @@ | |||||
| package xyz.veronie.bgg.result; | |||||
| import java.awt.Label; | |||||
| 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 ThingDetailsComposite extends Composite { | |||||
| ThingDetails thingDetails; | |||||
| private Label nameField; | |||||
| private Label designerField; | |||||
| private Label publisherField; | |||||
| private Label yearField; | |||||
| public ThingDetailsComposite(Composite parent, int style) { | |||||
| super(parent, style); | |||||
| } | |||||
| @PostConstruct | |||||
| public void create() { | |||||
| setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, false)); | |||||
| GridLayout layout = new GridLayout(2, false); | |||||
| setLayout(layout); | |||||
| Label nameLbl = new Label("Name"); | |||||
| applyLayout(nameLbl); | |||||
| nameField = new Label(""); | |||||
| Label designerLbl = new Label("Designer"); | |||||
| applyLayout(designerLbl); | |||||
| designerField = new Label(""); | |||||
| Label publisherLbl = new Label("Publisher"); | |||||
| applyLayout(publisherLbl); | |||||
| publisherField = new Label(""); | |||||
| Label yearLbl = new Label("Publisher"); | |||||
| applyLayout(yearLbl); | |||||
| yearField = new Label(""); | |||||
| this.getParent().layout(); | |||||
| } | |||||
| private void applyLayout(Label label) { | |||||
| label.setAlignment(SWT.RIGHT); | |||||
| } | |||||
| public void selectedThingChanged(Thing thing) { | |||||
| System.out.println("TOPIC_THING_SELECTION: " + thing); | |||||
| thingDetails = thing.getDetails(); | |||||
| if(thingDetails != null) { | |||||
| nameField.setText(thingDetails.name); | |||||
| designerField.setText(thingDetails.designer); | |||||
| publisherField.setText(thingDetails.publisher); | |||||
| yearField.setText(Integer.toString(thingDetails.yearpublished)); | |||||
| } else { | |||||
| nameField.setText(""); | |||||
| designerField.setText(""); | |||||
| publisherField.setText(""); | |||||
| yearField.setText(""); | |||||
| } | |||||
| this.getParent().layout(); | |||||
| } | |||||
| } | |||||
| @@ -29,6 +29,8 @@ public interface EventConstants { | |||||
| String TOPIC_FAMILY_INFO = "INFO/FAMILY"; | String TOPIC_FAMILY_INFO = "INFO/FAMILY"; | ||||
| String TOPIC_TAG_RESULT = "EVENT_TAG_RESULT"; | String TOPIC_TAG_RESULT = "EVENT_TAG_RESULT"; | ||||
| String TOPIC_THING_SELECTION = "SELECTION_CHANGED"; | |||||
| } | } | ||||
| @@ -12,23 +12,15 @@ import org.eclipse.jface.resource.LocalResourceManager; | |||||
| public enum Resources { | public enum Resources { | ||||
| INSTANCE; | INSTANCE; | ||||
| private Path prefixPath; | |||||
| private Path tmpDir; | private Path tmpDir; | ||||
| private LocalResourceManager resourceManager; | private LocalResourceManager resourceManager; | ||||
| private Resources() { | private Resources() { | ||||
| try { | try { | ||||
| if(prefixPath == null) { | |||||
| tmpDir = Paths.get(Constants.TMP_PREFIX); | |||||
| if(!Files.exists(tmpDir)) { | |||||
| Files.createDirectory(tmpDir); | |||||
| } | |||||
| } else { | |||||
| tmpDir = Paths.get(prefixPath + File.separator + Constants.TMP_PREFIX); | |||||
| if(!Files.exists(tmpDir)) { | |||||
| Files.createDirectory(tmpDir); | |||||
| } | |||||
| tmpDir = Paths.get(System.getProperty("user.home") + File.separator + Paths.get(Constants.TMP_PREFIX)); | |||||
| if(!Files.exists(tmpDir)) { | |||||
| Files.createDirectory(tmpDir); | |||||
| } | } | ||||
| Path thumbPath = getThumbsDir(); | Path thumbPath = getThumbsDir(); | ||||
| if(!Files.exists(thumbPath)) { | if(!Files.exists(thumbPath)) { | ||||
| @@ -6,24 +6,61 @@ import javax.annotation.PostConstruct; | |||||
| import javax.inject.Inject; | import javax.inject.Inject; | ||||
| import org.eclipse.e4.core.di.annotations.Optional; | 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.e4.ui.di.UIEventTopic; | ||||
| import org.eclipse.jface.viewers.ArrayContentProvider; | import org.eclipse.jface.viewers.ArrayContentProvider; | ||||
| import org.eclipse.jface.viewers.ColumnLabelProvider; | import org.eclipse.jface.viewers.ColumnLabelProvider; | ||||
| import org.eclipse.jface.viewers.ISelectionChangedListener; | |||||
| import org.eclipse.jface.viewers.IStructuredSelection; | |||||
| import org.eclipse.jface.viewers.OwnerDrawLabelProvider; | |||||
| import org.eclipse.jface.viewers.SelectionChangedEvent; | |||||
| import org.eclipse.jface.viewers.TableViewer; | import org.eclipse.jface.viewers.TableViewer; | ||||
| import org.eclipse.jface.viewers.TableViewerColumn; | import org.eclipse.jface.viewers.TableViewerColumn; | ||||
| import org.eclipse.swt.SWT; | import org.eclipse.swt.SWT; | ||||
| import org.eclipse.swt.graphics.Image; | import org.eclipse.swt.graphics.Image; | ||||
| import org.eclipse.swt.graphics.Rectangle; | |||||
| import org.eclipse.swt.layout.GridData; | import org.eclipse.swt.layout.GridData; | ||||
| import org.eclipse.swt.layout.GridLayout; | import org.eclipse.swt.layout.GridLayout; | ||||
| import org.eclipse.swt.widgets.Composite; | import org.eclipse.swt.widgets.Composite; | ||||
| import org.eclipse.swt.widgets.Event; | |||||
| import org.eclipse.swt.widgets.Label; | import org.eclipse.swt.widgets.Label; | ||||
| import org.eclipse.swt.widgets.Table; | import org.eclipse.swt.widgets.Table; | ||||
| import org.eclipse.swt.widgets.TableColumn; | import org.eclipse.swt.widgets.TableColumn; | ||||
| import org.eclipse.swt.widgets.TableItem; | |||||
| import xyz.veronie.bgg.result.Thing; | import xyz.veronie.bgg.result.Thing; | ||||
| import xyz.veronie.bgg.result.ThingProvider; | import xyz.veronie.bgg.result.ThingProvider; | ||||
| import xyz.veronie.bgg.types.EventConstants; | import xyz.veronie.bgg.types.EventConstants; | ||||
| abstract class CenterImageLabelProvider extends OwnerDrawLabelProvider { | |||||
| protected void measure(Event event, Object element) { | |||||
| } | |||||
| protected void paint(Event event, Object element) { | |||||
| Image img = getImage(element); | |||||
| if (img != null) { | |||||
| Rectangle bounds = ((TableItem) event.item).getBounds(event.index); | |||||
| Rectangle imgBounds = img.getBounds(); | |||||
| bounds.width /= 2; | |||||
| bounds.width -= imgBounds.width / 2; | |||||
| bounds.height /= 2; | |||||
| bounds.height -= imgBounds.height / 2; | |||||
| int x = bounds.width > 0 ? bounds.x + bounds.width : bounds.x; | |||||
| int y = bounds.height > 0 ? bounds.y + bounds.height : bounds.y; | |||||
| event.gc.drawImage(img, x, y); | |||||
| } | |||||
| } | |||||
| protected abstract Image getImage(Object element); | |||||
| }; | |||||
| public class BggResultPart { | public class BggResultPart { | ||||
| private TableViewer viewer; | private TableViewer viewer; | ||||
| private Label statsLabel; | private Label statsLabel; | ||||
| @@ -31,6 +68,9 @@ public class BggResultPart { | |||||
| @Inject | @Inject | ||||
| private ThingProvider thingProvider; | private ThingProvider thingProvider; | ||||
| @Inject | |||||
| private IEventBroker eventBroker; | |||||
| @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); | ||||
| @@ -44,10 +84,6 @@ public class BggResultPart { | |||||
| statsLabel = new Label(main, SWT.FILL); | statsLabel = new Label(main, SWT.FILL); | ||||
| statsLabel.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); | statsLabel.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); | ||||
| statsLabel.setText("0 items"); | statsLabel.setText("0 items"); | ||||
| } | } | ||||
| @@ -75,16 +111,27 @@ public class BggResultPart { | |||||
| gridData.horizontalAlignment = GridData.FILL; | gridData.horizontalAlignment = GridData.FILL; | ||||
| gridData.horizontalSpan = 2; | gridData.horizontalSpan = 2; | ||||
| viewer.getControl().setLayoutData(gridData); | viewer.getControl().setLayoutData(gridData); | ||||
| viewer.addSelectionChangedListener(new ISelectionChangedListener() { | |||||
| @Override | |||||
| public void selectionChanged(SelectionChangedEvent event) { | |||||
| IStructuredSelection selection = viewer.getStructuredSelection(); | |||||
| Thing thing = (Thing)selection.getFirstElement(); | |||||
| eventBroker.send(EventConstants.TOPIC_THING_SELECTION, thing); | |||||
| } | |||||
| }); | |||||
| } | } | ||||
| public TableViewer getViewer() { | public TableViewer getViewer() { | ||||
| return viewer; | return viewer; | ||||
| } | } | ||||
| // This will create the columns for the table | // This will create the columns for the table | ||||
| private void createColumns(final Composite parent, final TableViewer viewer) { | private void createColumns(final Composite parent, final TableViewer viewer) { | ||||
| TableViewerColumn col = createTableViewerColumn(Thing.IdHeader, 100, 0); | |||||
| // https://stackoverflow.com/questions/12641354/putting-an-image-in-to-a-jface-table-cell-is-causing-gap-for-image-to-appear-in | |||||
| TableViewerColumn col = createTableViewerColumn(Thing.IdHeader, 250, 0); | |||||
| col.setLabelProvider(new ColumnLabelProvider() { | col.setLabelProvider(new ColumnLabelProvider() { | ||||
| @Override | @Override | ||||
| public String getText(Object element) { | public String getText(Object element) { | ||||
| @@ -93,17 +140,13 @@ public class BggResultPart { | |||||
| } | } | ||||
| }); | }); | ||||
| TableViewerColumn col2 = createTableViewerColumn(Thing.ThumbHeader, 50, 1); | |||||
| TableViewerColumn col2 = createTableViewerColumn(Thing.ThumbHeader, 150, 1); | |||||
| col2.setLabelProvider(new ColumnLabelProvider() { | col2.setLabelProvider(new ColumnLabelProvider() { | ||||
| @Override | @Override | ||||
| public Image getImage(Object element) { | public Image getImage(Object element) { | ||||
| Thing t = (Thing) element; | Thing t = (Thing) element; | ||||
| Image img = t.getThumbnail(); | Image img = t.getThumbnail(); | ||||
| if(img != null) { | |||||
| return img; | |||||
| } else { | |||||
| return null; | |||||
| } | |||||
| return img; | |||||
| } | } | ||||
| @Override | @Override | ||||
| @@ -129,9 +172,11 @@ public class BggResultPart { | |||||
| final TableColumn column = viewerColumn.getColumn(); | final TableColumn column = viewerColumn.getColumn(); | ||||
| column.setText(title); | column.setText(title); | ||||
| column.setWidth(bound); | column.setWidth(bound); | ||||
| column.setAlignment(SWT.LEFT); | |||||
| column.setResizable(true); | column.setResizable(true); | ||||
| column.setMoveable(true); | column.setMoveable(true); | ||||
| column.setData(colNumber); | column.setData(colNumber); | ||||
| return viewerColumn; | return viewerColumn; | ||||
| } | } | ||||
| @@ -153,8 +198,10 @@ public class BggResultPart { | |||||
| List<Thing> things = thingProvider.getThings(); | List<Thing> things = thingProvider.getThings(); | ||||
| viewer.setInput(things); | viewer.setInput(things); | ||||
| viewer.refresh(true); | viewer.refresh(true); | ||||
| statsLabel.setText(Integer.toString(things.size()) + " items"); | |||||
| statsLabel.redraw(); | |||||
| if(things != null) { | |||||
| statsLabel.setText(Integer.toString(things.size()) + " items"); | |||||
| statsLabel.redraw(); | |||||
| } | |||||
| } | } | ||||
| @@ -9,7 +9,6 @@ import org.eclipse.core.runtime.jobs.ProgressProvider; | |||||
| import org.eclipse.jface.viewers.ComboViewer; | import org.eclipse.jface.viewers.ComboViewer; | ||||
| import org.eclipse.swt.SWT; | import org.eclipse.swt.SWT; | ||||
| import org.eclipse.swt.events.SelectionAdapter; | import org.eclipse.swt.events.SelectionAdapter; | ||||
| import org.eclipse.swt.events.SelectionEvent; | |||||
| import org.eclipse.swt.layout.GridData; | import org.eclipse.swt.layout.GridData; | ||||
| import org.eclipse.swt.layout.GridLayout; | import org.eclipse.swt.layout.GridLayout; | ||||
| import org.eclipse.swt.widgets.Button; | import org.eclipse.swt.widgets.Button; | ||||
| @@ -24,8 +23,6 @@ import xyz.veronie.bgg.ui.result.DownloadProgressMonitor; | |||||
| public class DownloadThingDetailsPart { | public class DownloadThingDetailsPart { | ||||
| private DownloadProgressMonitor monitor; | private DownloadProgressMonitor monitor; | ||||
| private Button extendedInfoCheck; | |||||
| private Button downloadAllPlaysCheck; | |||||
| @PostConstruct | @PostConstruct | ||||
| public void createControls(Composite parent) { | public void createControls(Composite parent) { | ||||
| @@ -89,107 +86,6 @@ public class DownloadThingDetailsPart { | |||||
| imagesLbl.setText("Images"); | imagesLbl.setText("Images"); | ||||
| ComboViewer imagesCombo = new ComboViewer(optionsGroup); | ComboViewer imagesCombo = new ComboViewer(optionsGroup); | ||||
| CommonControls.makeEmptySpace(optionsGroup, 1); | CommonControls.makeEmptySpace(optionsGroup, 1); | ||||
| // Button onlyNewCheck = new Button(optionsGroup, SWT.CHECK); | |||||
| // onlyNewCheck.setText("Only new"); | |||||
| // | |||||
| // Button usePersNamesCheck = new Button(optionsGroup, SWT.CHECK); | |||||
| // usePersNamesCheck.setText("Use pers. names"); | |||||
| // usePersNamesCheck.setEnabled(false); | |||||
| // | |||||
| // Button only1DesignerCheck = new Button(optionsGroup, SWT.CHECK); | |||||
| // only1DesignerCheck.setText("Only one designer"); | |||||
| // only1DesignerCheck.setEnabled(false); | |||||
| // | |||||
| // | |||||
| // Button withDescCheck = new Button(optionsGroup, SWT.CHECK); | |||||
| // withDescCheck.setText("With description"); | |||||
| // | |||||
| // Button usePersImagesCheck = new Button(optionsGroup, SWT.CHECK); | |||||
| // usePersImagesCheck.setText("Use pers. images"); | |||||
| // usePersImagesCheck.setEnabled(false); | |||||
| // | |||||
| // Button only1PublisherCheck = new Button(optionsGroup, SWT.CHECK); | |||||
| // only1PublisherCheck.setText("Only one publisher"); | |||||
| // only1PublisherCheck.setEnabled(false); | |||||
| // | |||||
| // | |||||
| // Button limitDescCheck = new Button(optionsGroup, SWT.CHECK); | |||||
| // limitDescCheck.setText("Limit description"); | |||||
| // | |||||
| // Button useRecBestInfoCheck = new Button(optionsGroup, SWT.CHECK); | |||||
| // useRecBestInfoCheck.setText("Use rec./best info"); | |||||
| // useRecBestInfoCheck.setEnabled(false); | |||||
| // | |||||
| // Button only1ArtistCheck = new Button(optionsGroup, SWT.CHECK); | |||||
| // only1ArtistCheck.setText("Only one artist"); | |||||
| // only1ArtistCheck.setEnabled(false); | |||||
| // | |||||
| // | |||||
| // | |||||
| // Button downloadVotesCheck = new Button(optionsGroup, SWT.CHECK); | |||||
| // downloadVotesCheck.setText("Download votes"); | |||||
| // downloadVotesCheck.setEnabled(false); | |||||
| // downloadVotesCheck.addSelectionListener(new SelectionAdapter() { | |||||
| // @Override | |||||
| // public void widgetSelected(SelectionEvent e) { | |||||
| // extendedInfoCheck.setEnabled(true); | |||||
| // } | |||||
| // }); | |||||
| // | |||||
| // Button brnDetailCheck = new Button(optionsGroup, SWT.CHECK); | |||||
| // brnDetailCheck.setText("B/R/N detail"); | |||||
| // brnDetailCheck.setEnabled(false); | |||||
| // | |||||
| // Button reloadDataCheck = new Button(optionsGroup, SWT.CHECK); | |||||
| // reloadDataCheck.setText("Reload data"); | |||||
| // reloadDataCheck.setEnabled(false); | |||||
| // | |||||
| // | |||||
| // | |||||
| // extendedInfoCheck = new Button(optionsGroup, SWT.CHECK); | |||||
| // extendedInfoCheck.setText(" Extended info"); | |||||
| // extendedInfoCheck.setEnabled(false); // enabled when download votes is checked | |||||
| // | |||||
| // Button downloadPlaysCheck = new Button(optionsGroup, SWT.CHECK); | |||||
| // downloadPlaysCheck.setText("Download plays"); | |||||
| // downloadPlaysCheck.setEnabled(false); | |||||
| // downloadPlaysCheck.addSelectionListener(new SelectionAdapter() { | |||||
| // @Override | |||||
| // public void widgetSelected(SelectionEvent e) { | |||||
| // downloadAllPlaysCheck.setEnabled(true); | |||||
| // } | |||||
| // }); | |||||
| // | |||||
| // Button reloadImagesCheck = new Button(optionsGroup, SWT.CHECK); | |||||
| // reloadImagesCheck.setText("Reload images"); | |||||
| // reloadImagesCheck.setEnabled(false); | |||||
| // | |||||
| // | |||||
| // | |||||
| // Button downloadLangCheck = new Button(optionsGroup, SWT.CHECK); | |||||
| // downloadLangCheck.setText("Download lang."); | |||||
| // downloadLangCheck.setEnabled(false); | |||||
| // | |||||
| // downloadAllPlaysCheck = new Button(optionsGroup, SWT.CHECK); | |||||
| // downloadAllPlaysCheck.setText(" Download plays (all)"); | |||||
| // downloadAllPlaysCheck.setEnabled(false); // enabled when download plays checked | |||||
| // | |||||
| // Button ReloadQRCodesCheck = new Button(optionsGroup, SWT.CHECK); | |||||
| // ReloadQRCodesCheck.setText("Reload QR codes"); | |||||
| // ReloadQRCodesCheck.setEnabled(false); | |||||
| // | |||||
| // | |||||
| // Button namesImgCheck = new Button(optionsGroup, SWT.CHECK); | |||||
| // namesImgCheck.setText("Names in images"); | |||||
| // namesImgCheck.setEnabled(false); | |||||
| // | |||||
| // Button useQrCodesCheck = new Button(optionsGroup, SWT.CHECK); | |||||
| // useQrCodesCheck.setText("Use QR codes"); | |||||
| // useQrCodesCheck.setEnabled(false); | |||||
| } | } | ||||
| private void createRunNanDeckControls(Composite compo) { | private void createRunNanDeckControls(Composite compo) { | ||||
| @@ -203,7 +99,7 @@ public class DownloadThingDetailsPart { | |||||
| private void createLoadGamesControls(Composite compo) { | private void createLoadGamesControls(Composite compo) { | ||||
| Button loadGamesBtn = new Button(compo, SWT.LEFT); | Button loadGamesBtn = new Button(compo, SWT.LEFT); | ||||
| loadGamesBtn.setText("Load games"); | |||||
| loadGamesBtn.setText("Download details"); | |||||
| loadGamesBtn.addSelectionListener(new SelectionAdapter() { | loadGamesBtn.addSelectionListener(new SelectionAdapter() { | ||||
| }); | }); | ||||
| @@ -1,5 +1,38 @@ | |||||
| package xyz.veronie.bgg.ui.parts; | package xyz.veronie.bgg.ui.parts; | ||||
| import javax.annotation.PostConstruct; | |||||
| import javax.inject.Inject; | |||||
| import org.eclipse.e4.core.di.annotations.Optional; | |||||
| import org.eclipse.e4.ui.di.UIEventTopic; | |||||
| import org.eclipse.swt.SWT; | |||||
| import org.eclipse.swt.layout.GridData; | |||||
| import org.eclipse.swt.layout.GridLayout; | |||||
| import org.eclipse.swt.widgets.Composite; | |||||
| import xyz.veronie.bgg.result.Thing; | |||||
| import xyz.veronie.bgg.result.ThingDetailsComposite; | |||||
| import xyz.veronie.bgg.types.EventConstants; | |||||
| public class ThingListPart { | public class ThingListPart { | ||||
| private ThingDetailsComposite thingDetailsComposite; | |||||
| @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(2, false); | |||||
| main.setLayout(layout); | |||||
| thingDetailsComposite = new ThingDetailsComposite(main, SWT.BORDER); | |||||
| } | |||||
| @Inject | |||||
| @Optional | |||||
| private void selectedThingChanged(@UIEventTopic(EventConstants.TOPIC_THING_SELECTION) Thing thing) { | |||||
| thingDetailsComposite.selectedThingChanged(thing); | |||||
| } | |||||
| } | } | ||||