Right-click menu, Update core
This commit is contained in:
parent
af0acb41d2
commit
d37c71d208
@ -10,7 +10,8 @@ Require-Bundle: org.eclipse.ui,
|
|||||||
org.eclipse.ui.editors;bundle-version="3.17.0",
|
org.eclipse.ui.editors;bundle-version="3.17.0",
|
||||||
org.eclipse.text,
|
org.eclipse.text,
|
||||||
Java-WebSocket;bundle-version="1.5.4",
|
Java-WebSocket;bundle-version="1.5.4",
|
||||||
wrapped.me.mrletsplay.ShareClient-Core;bundle-version="1.0.0"
|
wrapped.me.mrletsplay.ShareClient-Core;bundle-version="1.0.0",
|
||||||
|
org.eclipse.core.resources;bundle-version="3.19.100"
|
||||||
Bundle-RequiredExecutionEnvironment: JavaSE-17
|
Bundle-RequiredExecutionEnvironment: JavaSE-17
|
||||||
Automatic-Module-Name: ShareClient
|
Automatic-Module-Name: ShareClient
|
||||||
Bundle-ActivationPolicy: lazy
|
Bundle-ActivationPolicy: lazy
|
||||||
|
39
plugin.xml
39
plugin.xml
@ -11,14 +11,14 @@
|
|||||||
<command
|
<command
|
||||||
categoryId="ShareClient.commands.category"
|
categoryId="ShareClient.commands.category"
|
||||||
name="Sample Command"
|
name="Sample Command"
|
||||||
id="ShareClient.commands.sampleCommand">
|
id="ShareClient.commands.shareProjectCommand">
|
||||||
</command>
|
</command>
|
||||||
</extension>
|
</extension>
|
||||||
<extension
|
<extension
|
||||||
point="org.eclipse.ui.handlers">
|
point="org.eclipse.ui.handlers">
|
||||||
<handler
|
<handler
|
||||||
class="me.mrletsplay.shareclient.handlers.SampleHandler"
|
class="me.mrletsplay.shareclient.handlers.ShareProjectHandler"
|
||||||
commandId="ShareClient.commands.sampleCommand">
|
commandId="ShareClient.commands.shareProjectCommand">
|
||||||
</handler>
|
</handler>
|
||||||
</extension>
|
</extension>
|
||||||
<extension
|
<extension
|
||||||
@ -39,7 +39,7 @@
|
|||||||
label="Sample Menu"
|
label="Sample Menu"
|
||||||
mnemonic="M">
|
mnemonic="M">
|
||||||
<command
|
<command
|
||||||
commandId="ShareClient.commands.sampleCommand"
|
commandId="ShareClient.commands.shareProjectCommand"
|
||||||
id="ShareClient.menus.sampleCommand"
|
id="ShareClient.menus.sampleCommand"
|
||||||
mnemonic="S">
|
mnemonic="S">
|
||||||
</command>
|
</command>
|
||||||
@ -51,12 +51,33 @@
|
|||||||
id="ShareClient.toolbars.sampleToolbar">
|
id="ShareClient.toolbars.sampleToolbar">
|
||||||
<command
|
<command
|
||||||
id="ShareClient.toolbars.sampleCommand"
|
id="ShareClient.toolbars.sampleCommand"
|
||||||
commandId="ShareClient.commands.sampleCommand"
|
commandId="ShareClient.commands.shareProjectCommand"
|
||||||
icon="icons/sample.png"
|
icon="icons/sample.png"
|
||||||
tooltip="Say hello world">
|
tooltip="Say hello world">
|
||||||
</command>
|
</command>
|
||||||
</toolbar>
|
</toolbar>
|
||||||
</menuContribution>
|
</menuContribution>
|
||||||
|
<menuContribution
|
||||||
|
allPopups="false"
|
||||||
|
locationURI="popup:org.eclipse.ui.popup.any?after=additions">
|
||||||
|
<menu
|
||||||
|
label="Share Client">
|
||||||
|
<command
|
||||||
|
commandId="ShareClient.commands.shareProjectCommand"
|
||||||
|
label="Share project"
|
||||||
|
style="push">
|
||||||
|
<visibleWhen
|
||||||
|
checkEnabled="false">
|
||||||
|
<iterate
|
||||||
|
ifEmpty="false">
|
||||||
|
<adapt
|
||||||
|
type="org.eclipse.core.resources.IResource">
|
||||||
|
</adapt>
|
||||||
|
</iterate>
|
||||||
|
</visibleWhen>
|
||||||
|
</command>
|
||||||
|
</menu>
|
||||||
|
</menuContribution>
|
||||||
</extension>
|
</extension>
|
||||||
<extension
|
<extension
|
||||||
point="org.eclipse.ui.views">
|
point="org.eclipse.ui.views">
|
||||||
@ -91,5 +112,13 @@
|
|||||||
file="contexts.xml">
|
file="contexts.xml">
|
||||||
</contexts>
|
</contexts>
|
||||||
</extension>
|
</extension>
|
||||||
|
<extension
|
||||||
|
point="org.eclipse.ui.preferencePages">
|
||||||
|
<page
|
||||||
|
class="me.mrletsplay.shareclient.ShareClientPreferencePage"
|
||||||
|
id="ShareClient.preferences"
|
||||||
|
name="Share Client">
|
||||||
|
</page>
|
||||||
|
</extension>
|
||||||
|
|
||||||
</plugin>
|
</plugin>
|
||||||
|
@ -1,8 +1,17 @@
|
|||||||
package me.mrletsplay.shareclient;
|
package me.mrletsplay.shareclient;
|
||||||
|
|
||||||
|
import java.net.URI;
|
||||||
|
import java.util.Random;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
|
import org.eclipse.jface.dialogs.MessageDialog;
|
||||||
import org.eclipse.ui.plugin.AbstractUIPlugin;
|
import org.eclipse.ui.plugin.AbstractUIPlugin;
|
||||||
import org.osgi.framework.BundleContext;
|
import org.osgi.framework.BundleContext;
|
||||||
|
|
||||||
|
import me.mrletsplay.shareclientcore.connection.ConnectionException;
|
||||||
|
import me.mrletsplay.shareclientcore.connection.RemoteConnection;
|
||||||
|
import me.mrletsplay.shareclientcore.connection.WebSocketConnection;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The activator class controls the plug-in life cycle
|
* The activator class controls the plug-in life cycle
|
||||||
*/
|
*/
|
||||||
@ -14,6 +23,8 @@ public class Activator extends AbstractUIPlugin {
|
|||||||
// The shared instance
|
// The shared instance
|
||||||
private static Activator plugin;
|
private static Activator plugin;
|
||||||
|
|
||||||
|
private RemoteConnection activeConnection;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The constructor
|
* The constructor
|
||||||
*/
|
*/
|
||||||
@ -26,6 +37,7 @@ public class Activator extends AbstractUIPlugin {
|
|||||||
plugin = this;
|
plugin = this;
|
||||||
|
|
||||||
System.out.println("STARTING");
|
System.out.println("STARTING");
|
||||||
|
getPreferenceStore().setDefault(ShareClientPreferences.SERVER_URI, "ws://localhost:5473");
|
||||||
// new ShareWSClient(URI.create("ws://localhost:5473")).connect();
|
// new ShareWSClient(URI.create("ws://localhost:5473")).connect();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -44,4 +56,32 @@ public class Activator extends AbstractUIPlugin {
|
|||||||
return plugin;
|
return plugin;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return activeConnection;
|
||||||
|
}
|
||||||
|
|
||||||
|
public RemoteConnection getActiveConnection() {
|
||||||
|
return activeConnection;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,29 @@
|
|||||||
|
package me.mrletsplay.shareclient;
|
||||||
|
|
||||||
|
import org.eclipse.jface.preference.BooleanFieldEditor;
|
||||||
|
import org.eclipse.jface.preference.FieldEditorPreferencePage;
|
||||||
|
import org.eclipse.jface.preference.StringFieldEditor;
|
||||||
|
import org.eclipse.ui.IWorkbench;
|
||||||
|
import org.eclipse.ui.IWorkbenchPreferencePage;
|
||||||
|
|
||||||
|
public class ShareClientPreferencePage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage {
|
||||||
|
|
||||||
|
public ShareClientPreferencePage() {
|
||||||
|
// super(GRID);
|
||||||
|
setPreferenceStore(Activator.getDefault().getPreferenceStore());
|
||||||
|
setDescription("Share Client Preferences");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void createFieldEditors() {
|
||||||
|
addField(new StringFieldEditor(ShareClientPreferences.SERVER_URI, "Server URI", getFieldEditorParent()));
|
||||||
|
addField(new StringFieldEditor(ShareClientPreferences.USERNAME, "Display Name", getFieldEditorParent()));
|
||||||
|
addField(new BooleanFieldEditor(ShareClientPreferences.SHOW_CURSORS, "Show other users' cursors", getFieldEditorParent()));
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void init(IWorkbench workbench) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,10 @@
|
|||||||
|
package me.mrletsplay.shareclient;
|
||||||
|
|
||||||
|
public class ShareClientPreferences {
|
||||||
|
|
||||||
|
public static final String
|
||||||
|
SERVER_URI = "serverUri",
|
||||||
|
USERNAME = "username",
|
||||||
|
SHOW_CURSORS = "showCursors";
|
||||||
|
|
||||||
|
}
|
@ -1,37 +1,52 @@
|
|||||||
package me.mrletsplay.shareclient.handlers;
|
package me.mrletsplay.shareclient.handlers;
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.net.URI;
|
|
||||||
import java.util.concurrent.atomic.AtomicBoolean;
|
import java.util.concurrent.atomic.AtomicBoolean;
|
||||||
|
|
||||||
import org.eclipse.core.commands.AbstractHandler;
|
import org.eclipse.core.commands.AbstractHandler;
|
||||||
import org.eclipse.core.commands.ExecutionEvent;
|
import org.eclipse.core.commands.ExecutionEvent;
|
||||||
import org.eclipse.core.commands.ExecutionException;
|
import org.eclipse.core.commands.ExecutionException;
|
||||||
import org.eclipse.jface.dialogs.MessageDialog;
|
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.BadLocationException;
|
||||||
import org.eclipse.jface.text.DocumentEvent;
|
import org.eclipse.jface.text.DocumentEvent;
|
||||||
import org.eclipse.jface.text.IDocument;
|
import org.eclipse.jface.text.IDocument;
|
||||||
import org.eclipse.jface.text.IDocumentListener;
|
import org.eclipse.jface.text.IDocumentListener;
|
||||||
|
import org.eclipse.jface.viewers.IStructuredSelection;
|
||||||
import org.eclipse.swt.widgets.Display;
|
import org.eclipse.swt.widgets.Display;
|
||||||
import org.eclipse.ui.IEditorPart;
|
import org.eclipse.ui.IEditorPart;
|
||||||
import org.eclipse.ui.IWorkbenchWindow;
|
import org.eclipse.ui.IWorkbenchWindow;
|
||||||
import org.eclipse.ui.handlers.HandlerUtil;
|
import org.eclipse.ui.handlers.HandlerUtil;
|
||||||
import org.eclipse.ui.texteditor.ITextEditor;
|
import org.eclipse.ui.texteditor.ITextEditor;
|
||||||
|
|
||||||
|
import me.mrletsplay.shareclient.Activator;
|
||||||
import me.mrletsplay.shareclientcore.connection.RemoteConnection;
|
import me.mrletsplay.shareclientcore.connection.RemoteConnection;
|
||||||
import me.mrletsplay.shareclientcore.connection.WebSocketConnection;
|
|
||||||
import me.mrletsplay.shareclientcore.document.DocumentListener;
|
import me.mrletsplay.shareclientcore.document.DocumentListener;
|
||||||
import me.mrletsplay.shareclientcore.document.SharedDocument;
|
import me.mrletsplay.shareclientcore.document.SharedDocument;
|
||||||
|
|
||||||
public class SampleHandler extends AbstractHandler {
|
public class ShareProjectHandler extends AbstractHandler {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Object execute(ExecutionEvent event) throws ExecutionException {
|
public Object execute(ExecutionEvent event) throws ExecutionException {
|
||||||
IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindowChecked(event);
|
IWorkbenchWindow window = HandlerUtil.getActiveWorkbenchWindowChecked(event);
|
||||||
MessageDialog.openInformation(
|
|
||||||
window.getShell(),
|
IStructuredSelection selection = HandlerUtil.getCurrentStructuredSelection(event);
|
||||||
"ShareClient",
|
if(selection.isEmpty()) return null;
|
||||||
"Hello, Eclipse world");
|
|
||||||
|
IResource res = Adapters.adapt(selection.getFirstElement(), IResource.class, false);
|
||||||
|
if(res == null) return null;
|
||||||
|
|
||||||
|
IProject project = res.getProject();
|
||||||
|
if(project == null) return null;
|
||||||
|
|
||||||
|
IPath path = project.getLocation();
|
||||||
|
if(path == null) return null;
|
||||||
|
|
||||||
|
RemoteConnection con = Activator.getDefault().getOrOpenConnection();
|
||||||
|
if(con == null) return null;
|
||||||
|
|
||||||
|
// TODO: share entire project
|
||||||
|
|
||||||
IEditorPart editor = window.getActivePage().getActiveEditor();
|
IEditorPart editor = window.getActivePage().getActiveEditor();
|
||||||
if(!(editor instanceof ITextEditor)) return null;
|
if(!(editor instanceof ITextEditor)) return null;
|
||||||
@ -40,13 +55,6 @@ public class SampleHandler extends AbstractHandler {
|
|||||||
|
|
||||||
IDocument eclipseDocument = textEditor.getDocumentProvider().getDocument(textEditor.getEditorInput());
|
IDocument eclipseDocument = textEditor.getDocumentProvider().getDocument(textEditor.getEditorInput());
|
||||||
|
|
||||||
RemoteConnection con = new WebSocketConnection(URI.create("ws://localhost:5473"));
|
|
||||||
try {
|
|
||||||
con.connect();
|
|
||||||
} catch (IOException | InterruptedException e) {
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
|
|
||||||
AtomicBoolean ignoreChanges = new AtomicBoolean(false);
|
AtomicBoolean ignoreChanges = new AtomicBoolean(false);
|
||||||
SharedDocument doc = new SharedDocument(con);
|
SharedDocument doc = new SharedDocument(con);
|
||||||
doc.localInsert(0, eclipseDocument.get());
|
doc.localInsert(0, eclipseDocument.get());
|
@ -5,6 +5,7 @@ import javax.inject.Inject;
|
|||||||
|
|
||||||
import org.eclipse.jface.action.Action;
|
import org.eclipse.jface.action.Action;
|
||||||
import org.eclipse.jface.dialogs.MessageDialog;
|
import org.eclipse.jface.dialogs.MessageDialog;
|
||||||
|
import org.eclipse.jface.preference.PreferenceDialog;
|
||||||
import org.eclipse.jface.resource.ImageDescriptor;
|
import org.eclipse.jface.resource.ImageDescriptor;
|
||||||
import org.eclipse.jface.viewers.ArrayContentProvider;
|
import org.eclipse.jface.viewers.ArrayContentProvider;
|
||||||
import org.eclipse.jface.viewers.ITableLabelProvider;
|
import org.eclipse.jface.viewers.ITableLabelProvider;
|
||||||
@ -17,6 +18,7 @@ import org.eclipse.swt.widgets.Composite;
|
|||||||
import org.eclipse.ui.IActionBars;
|
import org.eclipse.ui.IActionBars;
|
||||||
import org.eclipse.ui.ISharedImages;
|
import org.eclipse.ui.ISharedImages;
|
||||||
import org.eclipse.ui.IWorkbench;
|
import org.eclipse.ui.IWorkbench;
|
||||||
|
import org.eclipse.ui.dialogs.PreferencesUtil;
|
||||||
import org.eclipse.ui.part.ViewPart;
|
import org.eclipse.ui.part.ViewPart;
|
||||||
|
|
||||||
|
|
||||||
@ -82,7 +84,10 @@ public class ShareView extends ViewPart {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void run() {
|
public void run() {
|
||||||
showMessage("Settings");
|
PreferenceDialog dialog = PreferencesUtil.createPreferenceDialogOn(
|
||||||
|
null, "ShareClient.preferences",
|
||||||
|
null, null);
|
||||||
|
dialog.open();
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user