mirror of
https://github.com/hexedtech/codemp-intellij.git
synced 2024-11-21 14:44:49 +01:00
fix: assorted UX improvements
This commit is contained in:
parent
7507544fcb
commit
70aeca3d17
5 changed files with 65 additions and 107 deletions
|
@ -1,85 +0,0 @@
|
||||||
package mp.code.intellij.actions.buffer;
|
|
||||||
|
|
||||||
import com.intellij.openapi.actionSystem.ActionUpdateThread;
|
|
||||||
import com.intellij.openapi.actionSystem.AnAction;
|
|
||||||
import com.intellij.openapi.actionSystem.AnActionEvent;
|
|
||||||
import com.intellij.openapi.application.ApplicationManager;
|
|
||||||
import com.intellij.openapi.fileEditor.FileEditor;
|
|
||||||
import com.intellij.openapi.fileEditor.FileEditorManager;
|
|
||||||
import com.intellij.openapi.project.Project;
|
|
||||||
import com.intellij.openapi.ui.Messages;
|
|
||||||
import mp.code.BufferController;
|
|
||||||
import mp.code.data.TextChange;
|
|
||||||
import mp.code.exceptions.ControllerException;
|
|
||||||
import mp.code.intellij.CodeMP;
|
|
||||||
import mp.code.intellij.util.FileUtil;
|
|
||||||
import mp.code.intellij.util.InteractionUtil;
|
|
||||||
import mp.code.intellij.util.cb.BufferCallback;
|
|
||||||
import org.jetbrains.annotations.NotNull;
|
|
||||||
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.Optional;
|
|
||||||
import java.util.OptionalLong;
|
|
||||||
|
|
||||||
public class BufferShareAction extends AnAction {
|
|
||||||
@Override
|
|
||||||
public void actionPerformed(@NotNull AnActionEvent e) {
|
|
||||||
Project proj = e.getProject();
|
|
||||||
FileEditor currentEditor = FileEditorManager.getInstance(proj).getSelectedEditor();
|
|
||||||
if(currentEditor == null) {
|
|
||||||
Messages.showErrorDialog(
|
|
||||||
"No file is currently open!",
|
|
||||||
"CodeMP Buffer Share"
|
|
||||||
);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
String path = FileUtil.getRelativePath(proj, currentEditor.getFile());
|
|
||||||
if(path == null) {
|
|
||||||
Messages.showErrorDialog(
|
|
||||||
"File must belong to project!",
|
|
||||||
"CodeMP Buffer Share"
|
|
||||||
);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
InteractionUtil.createBuffer(proj, path);
|
|
||||||
Optional<BufferController> controller = InteractionUtil.bufferAttach(proj, CodeMP.getActiveWorkspace(), path);
|
|
||||||
if(controller.isEmpty()) {
|
|
||||||
Messages.showErrorDialog(
|
|
||||||
"An unknown error has occurred!",
|
|
||||||
"CodeMP Buffer Share"
|
|
||||||
);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
try {
|
|
||||||
controller.get().send(new TextChange(
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
new String(currentEditor.getFile().contentsToByteArray()),
|
|
||||||
OptionalLong.empty()
|
|
||||||
));
|
|
||||||
ApplicationManager.getApplication().runWriteAction(() -> {
|
|
||||||
try {
|
|
||||||
FileUtil.getAndRegisterBufferEquivalent(this, proj, controller.get());
|
|
||||||
} catch(ControllerException | IOException ex) {
|
|
||||||
throw new RuntimeException(ex);
|
|
||||||
} catch(UnsupportedOperationException ignored) {}
|
|
||||||
});
|
|
||||||
controller.get().callback(buf -> new BufferCallback(proj).accept(buf));
|
|
||||||
} catch(ControllerException | IOException ex) {
|
|
||||||
throw new RuntimeException(ex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void update(@NotNull AnActionEvent e) {
|
|
||||||
e.getPresentation().setEnabled(CodeMP.isInWorkspace());
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public @NotNull ActionUpdateThread getActionUpdateThread() {
|
|
||||||
return ActionUpdateThread.EDT;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -21,15 +21,15 @@ public class BufferSyncAction extends AnAction {
|
||||||
public void actionPerformed(@NotNull AnActionEvent e) {
|
public void actionPerformed(@NotNull AnActionEvent e) {
|
||||||
// TODO if current buffer is managed, sync that instead of making user choose
|
// TODO if current buffer is managed, sync that instead of making user choose
|
||||||
|
|
||||||
String[] active_buffers = CodeMP.getActiveWorkspace().activeBuffers();
|
String[] activeBuffers = CodeMP.getActiveWorkspace().activeBuffers();
|
||||||
int choice = Messages.showChooseDialog(
|
int choice = Messages.showChooseDialog(
|
||||||
"Sync which buffer?",
|
"Sync which buffer?",
|
||||||
"CodeMP Buffer Detach",
|
"CodeMP Buffer Detach",
|
||||||
active_buffers,
|
activeBuffers,
|
||||||
"",
|
"",
|
||||||
Messages.getQuestionIcon()
|
Messages.getQuestionIcon()
|
||||||
);
|
);
|
||||||
String path = active_buffers[choice];
|
String path = activeBuffers[choice];
|
||||||
|
|
||||||
Optional<BufferController> controller = CodeMP.getActiveWorkspace().getBuffer(path);
|
Optional<BufferController> controller = CodeMP.getActiveWorkspace().getBuffer(path);
|
||||||
if (controller.isEmpty()) {
|
if (controller.isEmpty()) {
|
||||||
|
|
|
@ -3,20 +3,17 @@ package mp.code.intellij.actions.workspace;
|
||||||
import com.intellij.openapi.actionSystem.ActionUpdateThread;
|
import com.intellij.openapi.actionSystem.ActionUpdateThread;
|
||||||
import com.intellij.openapi.actionSystem.AnAction;
|
import com.intellij.openapi.actionSystem.AnAction;
|
||||||
import com.intellij.openapi.actionSystem.AnActionEvent;
|
import com.intellij.openapi.actionSystem.AnActionEvent;
|
||||||
import com.intellij.openapi.ui.Messages;
|
|
||||||
import mp.code.intellij.CodeMP;
|
import mp.code.intellij.CodeMP;
|
||||||
import mp.code.intellij.util.InteractionUtil;
|
import mp.code.intellij.util.InteractionUtil;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
|
import java.util.Objects;
|
||||||
|
|
||||||
public class WorkspaceLeaveAction extends AnAction {
|
public class WorkspaceLeaveAction extends AnAction {
|
||||||
@Override
|
@Override
|
||||||
public void actionPerformed(@NotNull AnActionEvent e) {
|
public void actionPerformed(@NotNull AnActionEvent e) {
|
||||||
String workspaceId = Messages.showInputDialog(
|
String workspaceId = CodeMP.getActiveWorkspace().getWorkspaceId();
|
||||||
"Workspace to leave:",
|
InteractionUtil.leaveWorkspace(Objects.requireNonNull(e.getProject()), workspaceId, null);
|
||||||
"CodeMP Workspace Leave",
|
|
||||||
Messages.getQuestionIcon());
|
|
||||||
|
|
||||||
InteractionUtil.leaveWorkspace(e.getProject(), workspaceId, null);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -1,11 +1,17 @@
|
||||||
package mp.code.intellij.ui;
|
package mp.code.intellij.ui;
|
||||||
|
|
||||||
import com.intellij.openapi.application.ApplicationManager;
|
import com.intellij.openapi.application.ApplicationManager;
|
||||||
|
import com.intellij.openapi.editor.Editor;
|
||||||
|
import com.intellij.openapi.fileEditor.FileEditor;
|
||||||
|
import com.intellij.openapi.fileEditor.FileEditorManager;
|
||||||
|
import com.intellij.openapi.fileEditor.TextEditor;
|
||||||
import com.intellij.openapi.project.Project;
|
import com.intellij.openapi.project.Project;
|
||||||
import com.intellij.openapi.ui.Messages;
|
import com.intellij.openapi.ui.Messages;
|
||||||
import com.intellij.ui.components.JBList;
|
import com.intellij.ui.components.JBList;
|
||||||
import com.intellij.ui.treeStructure.Tree;
|
import com.intellij.ui.treeStructure.Tree;
|
||||||
|
import mp.code.BufferController;
|
||||||
import mp.code.Workspace;
|
import mp.code.Workspace;
|
||||||
|
import mp.code.data.TextChange;
|
||||||
import mp.code.exceptions.ControllerException;
|
import mp.code.exceptions.ControllerException;
|
||||||
import mp.code.intellij.CodeMP;
|
import mp.code.intellij.CodeMP;
|
||||||
import mp.code.intellij.util.FileUtil;
|
import mp.code.intellij.util.FileUtil;
|
||||||
|
@ -19,7 +25,10 @@ import java.awt.*;
|
||||||
import java.awt.event.ActionEvent;
|
import java.awt.event.ActionEvent;
|
||||||
import java.awt.event.MouseEvent;
|
import java.awt.event.MouseEvent;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Objects;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
import java.util.OptionalLong;
|
||||||
|
|
||||||
public class CodeMPToolPanel extends JPanel {
|
public class CodeMPToolPanel extends JPanel {
|
||||||
public CodeMPToolPanel(Project project) {
|
public CodeMPToolPanel(Project project) {
|
||||||
|
@ -64,21 +73,60 @@ public class CodeMPToolPanel extends JPanel {
|
||||||
}
|
}
|
||||||
case JOINED -> {
|
case JOINED -> {
|
||||||
this.setLayout(new BorderLayout(1, 0));
|
this.setLayout(new BorderLayout(1, 0));
|
||||||
JButton createButton = new JButton(new AbstractAction("Create buffer") {
|
this.add(new JButton(new AbstractAction("Share buffer") {
|
||||||
@Override
|
@Override
|
||||||
public void actionPerformed(ActionEvent e) {
|
public void actionPerformed(ActionEvent e) {
|
||||||
String bufferPath = Messages.showInputDialog(
|
Project proj = Objects.requireNonNull(project);
|
||||||
"Name of buffer:",
|
FileEditor currentEditor = FileEditorManager.getInstance(proj).getSelectedEditor();
|
||||||
"CodeMP Buffer Create",
|
if(currentEditor == null) {
|
||||||
Messages.getQuestionIcon()
|
Messages.showErrorDialog(
|
||||||
);
|
"No file is currently open!",
|
||||||
|
"CodeMP Buffer Share"
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
InteractionUtil.createBuffer(project, bufferPath);
|
String path = FileUtil.getRelativePath(proj, currentEditor.getFile());
|
||||||
|
if(path == null) {
|
||||||
|
Messages.showErrorDialog(
|
||||||
|
"File must belong to project!",
|
||||||
|
"CodeMP Buffer Share"
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
InteractionUtil.createBuffer(proj, path);
|
||||||
CodeMPToolPanel.this.redraw(project);
|
CodeMPToolPanel.this.redraw(project);
|
||||||
|
Optional<BufferController> controller = InteractionUtil.bufferAttach(proj, CodeMP.getActiveWorkspace(), path);
|
||||||
|
if(controller.isEmpty()) {
|
||||||
|
Messages.showErrorDialog(
|
||||||
|
"An unknown error has occurred!",
|
||||||
|
"CodeMP Buffer Share"
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
Editor ed = ((TextEditor) currentEditor).getEditor();
|
||||||
|
controller.get().send(new TextChange(
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
ed.getDocument().getText(),
|
||||||
|
OptionalLong.empty()
|
||||||
|
));
|
||||||
|
ApplicationManager.getApplication().runWriteAction(() -> {
|
||||||
|
try {
|
||||||
|
FileUtil.getAndRegisterBufferEquivalent(this, proj, controller.get());
|
||||||
|
} catch(ControllerException | IOException ex) {
|
||||||
|
throw new RuntimeException(ex);
|
||||||
|
} catch(UnsupportedOperationException ignored) {}
|
||||||
|
});
|
||||||
|
controller.get().callback(buf -> new BufferCallback(proj).accept(buf));
|
||||||
|
} catch(ControllerException ex) {
|
||||||
|
throw new RuntimeException(ex);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
}), BorderLayout.NORTH);
|
||||||
// createButton.setSize(createButton.getPreferredSize());
|
|
||||||
this.add(createButton, BorderLayout.NORTH);
|
|
||||||
|
|
||||||
Workspace ws = CodeMP.getActiveWorkspace();
|
Workspace ws = CodeMP.getActiveWorkspace();
|
||||||
JTree tree = drawTree(ws.getWorkspaceId(), ws.getFileTree(Optional.empty(), false));
|
JTree tree = drawTree(ws.getWorkspaceId(), ws.getFileTree(Optional.empty(), false));
|
||||||
|
|
|
@ -25,8 +25,6 @@
|
||||||
text="Leave Workspace"/>
|
text="Leave Workspace"/>
|
||||||
</group>
|
</group>
|
||||||
<group id="codemp.buffer" text="Buffer" popup="true">
|
<group id="codemp.buffer" text="Buffer" popup="true">
|
||||||
<action id="codemp.buffer.share" class="mp.code.intellij.actions.buffer.BufferShareAction"
|
|
||||||
text="Share Current Buffer"/>
|
|
||||||
<action id="codemp.buffer.attach" class="mp.code.intellij.actions.buffer.BufferAttachAction"
|
<action id="codemp.buffer.attach" class="mp.code.intellij.actions.buffer.BufferAttachAction"
|
||||||
text="Attach to Remote Buffer"/>
|
text="Attach to Remote Buffer"/>
|
||||||
<action id="codemp.buffer.detach" class="mp.code.intellij.actions.buffer.BufferDetachAction"
|
<action id="codemp.buffer.detach" class="mp.code.intellij.actions.buffer.BufferDetachAction"
|
||||||
|
|
Loading…
Reference in a new issue