From c33b02718f8a634c4bcdd097eae77e153b7624d5 Mon Sep 17 00:00:00 2001 From: MrLetsplay Date: Mon, 4 Dec 2023 21:37:13 +0100 Subject: [PATCH] Update UI --- icons/cog.png | Bin 4537 -> 485 bytes icons/cog@2x.png | Bin 4754 -> 888 bytes icons/door.png | Bin 0 -> 259 bytes icons/door@2x.png | Bin 0 -> 344 bytes icons/icon.png | Bin 0 -> 266 bytes icons/icon@2x.png | Bin 0 -> 392 bytes icons/sample.png | Bin 332 -> 0 bytes icons/sample@2x.png | Bin 526 -> 0 bytes icons/share.png | Bin 0 -> 416 bytes icons/share@2x.png | Bin 0 -> 763 bytes plugin.xml | 29 +--- .../me/mrletsplay/shareclient/Activator.java | 40 +++--- .../handlers/ShareProjectHandler.java | 131 ++++++++---------- .../shareclient/views/ShareView.java | 79 +++++++---- 14 files changed, 139 insertions(+), 140 deletions(-) create mode 100644 icons/door.png create mode 100644 icons/door@2x.png create mode 100644 icons/icon.png create mode 100644 icons/icon@2x.png delete mode 100644 icons/sample.png delete mode 100644 icons/sample@2x.png create mode 100644 icons/share.png create mode 100644 icons/share@2x.png diff --git a/icons/cog.png b/icons/cog.png index 2e8f76f0349a07c565f155557bda2cfe8744f5d6..e330165b037f853911cd306eaafc7526e59a7781 100644 GIT binary patch delta 459 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 literal 4754 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 BVAKEr literal 0 HcmV?d00001 diff --git a/icons/door@2x.png b/icons/door@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..cf217a24c6b71618d42c660575fa9206057407a6 GIT binary patch literal 344 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz&H|6fVg?4`^&rfc{H*UVP*AeO zHKHUqKdq!Zu_%?Hyu4g5GcUV1Ik6yBFTW^#_B$IXprWUqE{-7)t#79r`W-P4aJ{cm z5`Fopk|pDn13^)qo+mvsUMl(SjA@X5Dd=FhpIfRvoBd9CEc=H7L5G`` z2ij-KD!-fLmcWpAJt>?~Bh!3yve!#PrU&oXJ*$~iSJ!b!J20={6UaOqy7TvpVmXFo znN`0_86Mm`^DQ;!xz8VIRfaf~xl@1nG6s1qw0@)>s_)30!ElxFP_9O1$#-XyvSNk= njq_`KL-(>=``7kg?g2N`AE*DXc3$`i^e}^`tDnm{r-UW|ou7%e literal 0 HcmV?d00001 diff --git a/icons/icon.png b/icons/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..9b91d047b93849c34f14d5f4dd3da5e7b8f9c67d GIT binary patch literal 266 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`oCO|{#X$NE2s2h{6z&BwBuiW) zN`mv#O3D+9QW?t2%k?tzvWt@w3sUv+i_&MmvylQSn(pc17-G@8bkc3!!wNjE{hI@f zovb9krX;dhP5gaPKv1rC@;!O(mUosyV#bf>`<(4PwfcL&6qT;dNyk{VxCORVo>mC? z>~wJYtdrf>7n!VBsn@;I`FvqyO0(eGD^7gX3nn$Ne^9%@qj2ihM&=H&ifz>w-0JVn z7mH9}+UVTBuBq{8U72WznDyT-M^D=uJGjkOO)FWk|D&57OMFVdQ I&MBb@0EwJrSO5S3 literal 0 HcmV?d00001 diff --git a/icons/icon@2x.png b/icons/icon@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..f6ad71d74c2d8aff1889e71ce78554662d1720f6 GIT binary patch literal 392 zcmV;30eAk1P)qdfX`<4S1g8O0D$%DDuC9MAHm#yUV@3P089Jrb_al^eaIyiN(QvX zbPGB_+CGGCA!ne}lxiUb$hQxnTF?yCG^AOG0ruO6&@5~Xv^1kwSODtVhfpl64IF87 z+Jeb`4>&VInblxrh%VspLz_7On8e}@aJ~oJnR8A9h{c4qse1C~Z~%N-EJR}|01XzR z_A~&W8Vku78bF1Gq&*eDr({7rMg=HXP}|c1e6*%nGjssOLbm-S06s3W-3MT0q1Ya% m`!hP4s<&f)Htdw!|BnCi@m2c+lRhi}0000o}PQ;SW4Q?|D@o|!n4bZ+dmjHl(fFnOU>N3Hz|3`e^PLI_Tklq z9dEUPF8GjIQ2+RLZpDrNq~L=3C%1s!j|YcCWZ+aA5&{s6WBjJ7phjchl+7dD zK%??C5t{FV)M8Cck-?KSfC{eT(i|B$Wp$+QOcA_!0hFXcX&$6FDqzZKU<%z0%uwCY e0aKi5l4}7X=XWJ6VmxR70000{ZT)6VX-X|e!skhH1SmmK(Q+8xOk9EsoDx9;%V9VIujLL74J^=XMJoq9 z1|@9VK_4(VhK80y5@pbo6ckI-X8va_ZhIdO!f9Fi&L*dB`%g;@wBtO?KClDIJKpgF zIsXR&gB_67@QMe>IbYQF_DWvOz5n#UMXhhIg6u>s=Yd5ht>Yhtu@=)Y0h1l*%f Qr~m)}07*qoM6N<$f|JJHQ2+n{ diff --git a/icons/share.png b/icons/share.png new file mode 100644 index 0000000000000000000000000000000000000000..25f3a80e7203bc2305415a1414af70d35badb90d GIT binary patch literal 416 zcmV;R0bl-!P)H zK~y-6rIRr)1W^=)zdJ!O+o*)7QHg{^wW443Hj*)~5{+7;T#aUlhG_1NDJ0WtR1yV^ zM*IQ_Kfp|~ioKeBGQye>r#kua?#a6+?}?f5AC1*LsH)QPQD2hkmt%T3L8M#7|B=bO5M4D#SX*3$gd7du=IOp!Z z1@wBo4d4tg;2PL8vrAyX7Y2L|{&a&=V0P%EAPAaK6x~;?SgXWZ0V1*uya3O@#b7YF zQB_UTbmq4J8TAru&Cf3PHM@N8W8XJ#XWrW-X2vk#3^hA| zJw-iODRmgYN!NAR81q6(`87>fNCkY~_lPJYqPDemiHJVunk0*O1;;XC#|t%}lqvz}Wk^0JiCj*>;^N}oZnrx{ zM3(^^%#hyA-GEYRoQM_xR3hp-5v?-wsf2X7*XzyaW3YPFiidIh$PO$MUmuK^rMXbk{2y8jK}wlU^fyiuu{(zY;N-5v(Cha4!Ypp98 zn%x;N#>@ctlA<-ywaUyZTI(CFRx7LPZ3zR9q3gOgnRyHVn7Qq`?xmDt*kR^I7=}8n z$?Vub76vsU0Oy4ePYO2>BW}e2`de{ejA_*C^^ZXioUqo8GV^`_OH#_`xf+O(GK_u# zcnn|y8y_aj%y*=e7jicMY>Z<7{~O0b2%&Q~5JM?dBBGZ7Mg~Zp2_gO&)44VxDP;%1 zpA5;-BvC{sT+N8RDcpdywgKQ*N~p)oR|+@adEQ$h8V9h}N3S`KGbW{6N$PX|F^MrZ tH|Lbg~SYZGF002ovPDHLkV1gnGOvV5J literal 0 HcmV?d00001 diff --git a/plugin.xml b/plugin.xml index 2d5e187..86b8195 100644 --- a/plugin.xml +++ b/plugin.xml @@ -32,38 +32,15 @@ - - - - - - - - - - - - diff --git a/src/main/java/me/mrletsplay/shareclient/Activator.java b/src/main/java/me/mrletsplay/shareclient/Activator.java index 69efa24..5a38e9c 100644 --- a/src/main/java/me/mrletsplay/shareclient/Activator.java +++ b/src/main/java/me/mrletsplay/shareclient/Activator.java @@ -56,25 +56,31 @@ public class Activator extends AbstractUIPlugin { return plugin; } + public RemoteConnection openConnection(String sessionID) { + String serverURI = getPreferenceStore().getString(ShareClientPreferences.SERVER_URI); + if(serverURI == null) return null; + + String username = getPreferenceStore().getString(ShareClientPreferences.USERNAME); + if(username == null || username.isBlank()) username = "user" + new Random().nextInt(1000); + + activeConnection = new WebSocketConnection(URI.create(serverURI), username); + try { + activeConnection.connect(sessionID); // TODO: connect to existing session + } catch (ConnectionException e) { + MessageDialog.openInformation( + null, + "Share Client", + "Failed to connect to server: " + e); + activeConnection = null; + return null; + } + + return activeConnection; + } + public RemoteConnection getOrOpenConnection() { if(activeConnection == null) { - String serverURI = getPreferenceStore().getString(ShareClientPreferences.SERVER_URI); - if(serverURI == null) return null; - - String username = getPreferenceStore().getString(ShareClientPreferences.USERNAME); - if(username == null) username = "user" + new Random().nextInt(1000); - - activeConnection = new WebSocketConnection(URI.create(serverURI), username); - try { - activeConnection.connect(UUID.randomUUID().toString()); // TODO: connect to existing session - } catch (ConnectionException e) { - MessageDialog.openInformation( - null, - "Share Client", - "Failed to connect to server: " + e); - activeConnection = null; - return null; - } + openConnection(UUID.randomUUID().toString()); } return activeConnection; diff --git a/src/main/java/me/mrletsplay/shareclient/handlers/ShareProjectHandler.java b/src/main/java/me/mrletsplay/shareclient/handlers/ShareProjectHandler.java index 8144c45..07e41c0 100644 --- a/src/main/java/me/mrletsplay/shareclient/handlers/ShareProjectHandler.java +++ b/src/main/java/me/mrletsplay/shareclient/handlers/ShareProjectHandler.java @@ -1,7 +1,5 @@ package me.mrletsplay.shareclient.handlers; -import java.util.concurrent.atomic.AtomicBoolean; - import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; @@ -9,21 +7,12 @@ import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.Adapters; import org.eclipse.core.runtime.IPath; -import org.eclipse.jface.text.BadLocationException; -import org.eclipse.jface.text.DocumentEvent; -import org.eclipse.jface.text.IDocument; -import org.eclipse.jface.text.IDocumentListener; import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.swt.widgets.Display; -import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.handlers.HandlerUtil; -import org.eclipse.ui.texteditor.ITextEditor; import me.mrletsplay.shareclient.Activator; import me.mrletsplay.shareclientcore.connection.RemoteConnection; -import me.mrletsplay.shareclientcore.document.DocumentListener; -import me.mrletsplay.shareclientcore.document.SharedDocument; public class ShareProjectHandler extends AbstractHandler { @@ -46,67 +35,67 @@ public class ShareProjectHandler extends AbstractHandler { RemoteConnection con = Activator.getDefault().getOrOpenConnection(); if(con == null) return null; - // TODO: share entire project + // TODO: handle case when adding project to existing session - IEditorPart editor = window.getActivePage().getActiveEditor(); - if(!(editor instanceof ITextEditor)) return null; - - ITextEditor textEditor = (ITextEditor) editor; - - IDocument eclipseDocument = textEditor.getDocumentProvider().getDocument(textEditor.getEditorInput()); - - AtomicBoolean ignoreChanges = new AtomicBoolean(false); - SharedDocument doc = new SharedDocument(con); - doc.localInsert(0, eclipseDocument.get()); - - doc.addListener(new DocumentListener() { - - @Override - public void onInsert(int index, char character) { - Display.getDefault().asyncExec(() -> { - try { - ignoreChanges.set(true); - eclipseDocument.replace(index, 0, String.valueOf(character)); - ignoreChanges.set(false); - } catch (BadLocationException e) { - e.printStackTrace(); - } - }); - - } - - @Override - public void onDelete(int index) { - Display.getDefault().asyncExec(() -> { - try { - ignoreChanges.set(true); - eclipseDocument.replace(index, 1, ""); - ignoreChanges.set(false); - } catch (BadLocationException e) { - e.printStackTrace(); - } - }); - } - }); - - eclipseDocument.addDocumentListener(new IDocumentListener() { - - @Override - public void documentChanged(DocumentEvent event) { - if(ignoreChanges.get()) return; // TODO: not very ideal - - if(event.getLength() > 0) { - doc.localDelete(event.getOffset(), event.getLength()); - } - - doc.localInsert(event.getOffset(), event.getText()); - } - - @Override - public void documentAboutToBeChanged(DocumentEvent event) { - - } - }); +// IEditorPart editor = window.getActivePage().getActiveEditor(); +// if(!(editor instanceof ITextEditor)) return null; +// +// ITextEditor textEditor = (ITextEditor) editor; +// +// IDocument eclipseDocument = textEditor.getDocumentProvider().getDocument(textEditor.getEditorInput()); +// +// AtomicBoolean ignoreChanges = new AtomicBoolean(false); +// SharedDocument doc = new SharedDocument(con); +// doc.localInsert(0, eclipseDocument.get()); +// +// doc.addListener(new DocumentListener() { +// +// @Override +// public void onInsert(int index, char character) { +// Display.getDefault().asyncExec(() -> { +// try { +// ignoreChanges.set(true); +// eclipseDocument.replace(index, 0, String.valueOf(character)); +// ignoreChanges.set(false); +// } catch (BadLocationException e) { +// e.printStackTrace(); +// } +// }); +// +// } +// +// @Override +// public void onDelete(int index) { +// Display.getDefault().asyncExec(() -> { +// try { +// ignoreChanges.set(true); +// eclipseDocument.replace(index, 1, ""); +// ignoreChanges.set(false); +// } catch (BadLocationException e) { +// e.printStackTrace(); +// } +// }); +// } +// }); +// +// eclipseDocument.addDocumentListener(new IDocumentListener() { +// +// @Override +// public void documentChanged(DocumentEvent event) { +// if(ignoreChanges.get()) return; // TODO: not very ideal +// +// if(event.getLength() > 0) { +// doc.localDelete(event.getOffset(), event.getLength()); +// } +// +// doc.localInsert(event.getOffset(), event.getText()); +// } +// +// @Override +// public void documentAboutToBeChanged(DocumentEvent event) { +// +// } +// }); return null; } diff --git a/src/main/java/me/mrletsplay/shareclient/views/ShareView.java b/src/main/java/me/mrletsplay/shareclient/views/ShareView.java index 42b829b..33b2695 100644 --- a/src/main/java/me/mrletsplay/shareclient/views/ShareView.java +++ b/src/main/java/me/mrletsplay/shareclient/views/ShareView.java @@ -1,9 +1,14 @@ package me.mrletsplay.shareclient.views; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + import javax.inject.Inject; import org.eclipse.jface.action.Action; +import org.eclipse.jface.dialogs.InputDialog; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.preference.PreferenceDialog; import org.eclipse.jface.resource.ImageDescriptor; @@ -15,30 +20,18 @@ import org.eclipse.jface.viewers.TableViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Display; import org.eclipse.ui.IActionBars; import org.eclipse.ui.ISharedImages; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.dialogs.PreferencesUtil; import org.eclipse.ui.part.ViewPart; - -/** - * This sample class demonstrates how to plug-in a new - * workbench view. The view shows data obtained from the - * model. The sample creates a dummy model on the fly, - * but a real implementation would connect to the model - * available either in this or another plug-in (e.g. the workspace). - * The view is connected to the model using a content provider. - *

- * The view uses a label provider to define how model - * objects should be presented in the view. Each - * view can present the same model objects using - * different labels and icons, if needed. Alternatively, - * a single label provider can be shared between views - * in order to ensure that objects of the same type are - * presented in the same way everywhere. - *

- */ +import me.mrletsplay.shareclient.Activator; +import me.mrletsplay.shareclientcore.connection.ConnectionException; +import me.mrletsplay.shareclientcore.connection.RemoteConnection; +import me.mrletsplay.shareclientcore.connection.message.PeerJoinMessage; +import me.mrletsplay.shareclientcore.connection.message.RequestFullSyncMessage; public class ShareView extends ViewPart { @@ -51,6 +44,8 @@ public class ShareView extends ViewPart { private TableViewer viewer; + private List peerNames = new ArrayList<>(); + class ViewLabelProvider extends LabelProvider implements ITableLabelProvider { @Override public String getColumnText(Object obj, int index) { @@ -71,7 +66,7 @@ public class ShareView extends ViewPart { viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL); viewer.setContentProvider(ArrayContentProvider.getInstance()); - viewer.setInput(new String[] { "One", "Two", "Three" }); + viewer.setInput(new String[] {}); viewer.setLabelProvider(new ViewLabelProvider()); // Create the help context id for the viewer's control @@ -80,7 +75,42 @@ public class ShareView extends ViewPart { IActionBars bars = getViewSite().getActionBars(); - Action showSettings = new Action() { + Action joinSession = new Action("Join session", ImageDescriptor.createFromFile(ShareView.class, "/icons/door.png")) { + + @Override + public void run() { + InputDialog input = new InputDialog(viewer.getControl().getShell(), "Join session", "Enter session id", "EEE", null); + input.setBlockOnOpen(true); + if(input.open() != InputDialog.OK) return; + + RemoteConnection connection = Activator.getDefault().getActiveConnection(); + if(connection != null) connection.disconnect(); + + connection = Activator.getDefault().openConnection(input.getValue()); + if(connection == null) return; + + connection.addListener(m -> { + System.out.println("Got: " + m); + if(m instanceof PeerJoinMessage join) { + peerNames.add(join.peerName()); + Display.getDefault().asyncExec(() -> viewer.setInput(peerNames.toArray(String[]::new))); + } + + // TODO: handle FULL_SYNC + }); + + try { + connection.send(new RequestFullSyncMessage(connection.getSiteID(), null)); + } catch (ConnectionException e) { + connection.disconnect(); + showMessage("Failed to send: " + e); + } + } + + }; + bars.getToolBarManager().add(joinSession); + + Action showSettings = new Action("Settings", ImageDescriptor.createFromFile(ShareView.class, "/icons/cog.png")) { @Override public void run() { @@ -91,20 +121,17 @@ public class ShareView extends ViewPart { } }; + bars.getToolBarManager().add(showSettings); viewer.addDoubleClickListener(event -> { - showMessage(String.valueOf(((StructuredSelection) event.getSelection()).toArray()[0])); + showMessage(Arrays.toString(((StructuredSelection) event.getSelection()).toArray())); }); - - showSettings.setImageDescriptor(ImageDescriptor.createFromFile(ShareView.class, "/icons/cog.png")); - - bars.getToolBarManager().add(showSettings); } private void showMessage(String message) { MessageDialog.openInformation( viewer.getControl().getShell(), - "Sample View", + "Share Client", message); }