Skip to content

Commit 3b3c6f1

Browse files
committed
fix: show multiple lines in patch/issue description when editing
1 parent c10d2c5 commit 3b3c6f1

File tree

8 files changed

+39
-28
lines changed

8 files changed

+39
-28
lines changed

src/main/java/network/radicle/jetbrains/radiclejetbrainsplugin/issues/CreateIssuePanel.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ private JComponent infoComponent() {
137137
borderPanel.add(projectSelect, BorderLayout.NORTH);
138138
borderPanel.add(titleField, BorderLayout.CENTER);
139139

140-
descriptionField = new DragAndDropField(project, 0, false);
140+
descriptionField = new DragAndDropField(project, 0, false, false);
141141
descriptionField.setBackground(UIUtil.getListBackground());
142142
descriptionField.setFont(JBFont.label());
143143
descriptionField.getComponent().setBorder(JBUI.Borders.empty(8));

src/main/java/network/radicle/jetbrains/radiclejetbrainsplugin/issues/overview/IssueComponent.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,7 @@ private JComponent getHeader() {
206206
issueModel.setValue(edited);
207207
}
208208
return success;
209-
}).enableDragAndDrop(false).build();
209+
}).enableDragAndDrop(false).oneLine(true).build();
210210
var contentPanel = panelHandle.panel;
211211
var b = new CodeReviewChatItemUIUtil.Builder(CodeReviewChatItemUIUtil.ComponentType.FULL,
212212
i -> new SingleValueModel<>(RadicleIcons.DEFAULT_AVATAR), contentPanel);

src/main/java/network/radicle/jetbrains/radiclejetbrainsplugin/patches/timeline/EditablePanelHandler.java

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ public class EditablePanelHandler {
3838
private final boolean hideCancelAction;
3939
private final boolean closeEditorAfterSubmit;
4040
private final boolean allowDragAndDrop;
41+
private final boolean oneLine;
4142
private DragAndDropField dragAndDropField;
4243
private SingleValueModel<Boolean> isLoading = new SingleValueModel<>(false);
4344
private OnCloseListener onCloseListener;
@@ -48,6 +49,7 @@ public EditablePanelHandler(PanelBuilder builder) {
4849
this.allowDragAndDrop = builder.allowDragAndDrop;
4950
this.project = builder.project;
5051
this.paneComponent = builder.paneComponent;
52+
this.oneLine = builder.oneLine;
5153
this.editorPaneLayout = SizeRestrictedSingleComponentLayout.Companion.constant(null, null);
5254
this.panel = new JPanel(null);
5355
this.panel.setOpaque(false);
@@ -81,7 +83,7 @@ public void showAndFocusEditor() {
8183
hideEditor();
8284
return null;
8385
});
84-
dragAndDropField = new DragAndDropField(project, this.allowDragAndDrop);
86+
dragAndDropField = new DragAndDropField(project, this.allowDragAndDrop, this.oneLine);
8587
dragAndDropField.setText(content.getValue());
8688
//CollaborationToolsUIUtil.installValidator(textField, model.errorValue.map { it?.localizedMessage })
8789
//var inputField = wrapWithProgressOverlay(textField, model.isBusyValue);
@@ -165,6 +167,7 @@ public static class PanelBuilder {
165167
private boolean hideCancelAction = false;
166168
private boolean closeEditorAfterSubmit = true;
167169
private boolean allowDragAndDrop = true;
170+
private boolean oneLine = false;
168171

169172
public PanelBuilder(Project project, JComponent paneComponent, String actionName,
170173
SingleValueModel<String> content, Function<DragAndDropField, Boolean> okAction) {
@@ -190,6 +193,11 @@ public PanelBuilder closeEditorAfterSubmit(boolean close) {
190193
return this;
191194
}
192195

196+
public PanelBuilder oneLine(boolean one) {
197+
this.oneLine = one;
198+
return this;
199+
}
200+
193201
public EditablePanelHandler build() {
194202
return new EditablePanelHandler(this);
195203
}

src/main/java/network/radicle/jetbrains/radiclejetbrainsplugin/patches/timeline/TimelineComponent.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ private EditablePanelHandler getCommentField() {
104104
RadicleBundle.message("patch.comment"), new SingleValueModel<>(""),
105105
this::createComment)
106106
.hideCancelAction(true)
107-
.enableDragAndDrop(false)
107+
.enableDragAndDrop(true)
108108
.closeEditorAfterSubmit(false)
109109
.build();
110110
panelHandle.showAndFocusEditor();
@@ -134,7 +134,7 @@ private JComponent getHeader() {
134134
radPatchModel.setValue(edited);
135135
}
136136
return success;
137-
}).enableDragAndDrop(false).build();
137+
}).enableDragAndDrop(false).oneLine(true).build();
138138
var contentPanel = panelHandle.panel;
139139
var actionsPanel = CollaborationToolsUIUtilKt.HorizontalListPanel(CodeReviewCommentUIUtil.Actions.HORIZONTAL_GAP);
140140
actionsPanel.add(CodeReviewCommentUIUtil.INSTANCE.createEditButton(e -> {

src/main/java/network/radicle/jetbrains/radiclejetbrainsplugin/patches/timeline/TimelineComponentFactory.java

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,6 @@
4444
import java.util.List;
4545
import java.util.concurrent.CountDownLatch;
4646

47-
import static network.radicle.jetbrains.radiclejetbrainsplugin.toolwindow.Utils.getHorizontalPanel;
48-
import static network.radicle.jetbrains.radiclejetbrainsplugin.toolwindow.Utils.getVerticalPanel;
49-
5047
public class TimelineComponentFactory {
5148
private static final String PATTERN_FORMAT = "dd/MM/yyyy HH:mm";
5249
private static final DateTimeFormatter DATE_TIME_FORMATTER =
@@ -96,7 +93,7 @@ public JComponent createDescSection() {
9693
}
9794

9895
public JComponent createTimeline() {
99-
mainPanel = getVerticalPanel(0);
96+
mainPanel = Utils.getVerticalPanel(0);
10097
var loadingIcon = new JLabel(new AnimatedIcon.Default());
10198
mainPanel.add(loadingIcon);
10299
ApplicationManager.getApplication().executeOnPooledThread(() -> {
@@ -141,23 +138,23 @@ private String findMessage(String replyTo) {
141138
}
142139

143140
private JComponent createRevisionComponent(RadPatch.Revision rev) {
144-
var contentPanel = getVerticalPanel(4);
141+
var contentPanel = Utils.getVerticalPanel(4);
145142
contentPanel.setOpaque(false);
146-
var horizontalPanel = getHorizontalPanel(8);
143+
var horizontalPanel = Utils.getHorizontalPanel(8);
147144
horizontalPanel.setOpaque(false);
148145
var revAuthor = rev.author().generateLabelText(cli);
149146
return createTimeLineItem(contentPanel, horizontalPanel, RadicleBundle.message("revisionPublish", rev.id(), revAuthor), rev.timestamp());
150147
}
151148

152149
private JComponent createReviewComponent(RadPatch.Review review) {
153-
var reviewPanel = getVerticalPanel(0);
150+
var reviewPanel = Utils.getVerticalPanel(0);
154151
var textHtmlEditor = new BaseHtmlEditorPane();
155152
textHtmlEditor.setOpaque(false);
156153
var message = Strings.nullToEmpty(review.summary());
157154
var panel = new BorderLayoutPanel();
158155
panel.setOpaque(false);
159156
var editorPane = new MarkDownEditorPaneFactory(message, patch.project, patch.radProject.id, file);
160-
var myPanel = getVerticalPanel(1);
157+
var myPanel = Utils.getVerticalPanel(1);
161158
myPanel.setOpaque(false);
162159
myPanel.add(editorPane.htmlEditorPane());
163160
var verdictMsg = review.verdict() == RadPatch.Review.Verdict.ACCEPT ? RadicleBundle.message("approved") : RadicleBundle.message("requestChanges");
@@ -175,7 +172,7 @@ private JComponent createReviewComponent(RadPatch.Review review) {
175172
}
176173

177174
private JComponent createCommentComponent(RadDiscussion com) {
178-
var myMainPanel = getVerticalPanel(0);
175+
var myMainPanel = Utils.getVerticalPanel(0);
179176
var textHtmlEditor = new BaseHtmlEditorPane();
180177
textHtmlEditor.setOpaque(false);
181178
var message = com.body;
@@ -188,15 +185,15 @@ private JComponent createCommentComponent(RadDiscussion com) {
188185
var editorPane = new MarkDownEditorPaneFactory(message, patch.project, patch.radProject.id, file);
189186
panel.addToCenter(StatusMessageComponentFactory.INSTANCE.create(editorPane.htmlEditorPane(), StatusMessageType.WARNING));
190187
emojiPanel = new PatchEmojiPanel(patchModel, com.reactions, com.id, radDetails);
191-
var verticalPanel = getVerticalPanel(5);
188+
var verticalPanel = Utils.getVerticalPanel(5);
192189
verticalPanel.setOpaque(false);
193190
emojiJPanel = emojiPanel.getEmojiPanel();
194191
verticalPanel.add(emojiJPanel);
195192
replyPanel = new MyReplyPanel(patch.project, com, patchModel).getThreadActionsComponent();
196193
verticalPanel.add(replyPanel);
197194
panel.addToBottom(verticalPanel);
198195
if (com.isReviewComment()) {
199-
var infoPanel = getHorizontalPanel(0);
196+
var infoPanel = Utils.getHorizontalPanel(0);
200197
infoPanel.setOpaque(false);
201198
var msg = RadicleBundle.message("comment.on", com.location.path, com.location.start);
202199
if (!patch.isDiscussionBelongedToLatestRevision(com)) {
@@ -217,7 +214,7 @@ private JComponent createCommentComponent(RadDiscussion com) {
217214
var contentPanel = panelHandle.panel;
218215
var actionsPanel = CollaborationToolsUIUtilKt.HorizontalListPanel(CodeReviewCommentUIUtil.Actions.HORIZONTAL_GAP);
219216
var self = cli.getCurrentIdentity();
220-
if (self != null && com.author.id.contains(self.nodeId)) {
217+
if (self != null && com.author != null && com.author.contains(self.nodeId)) {
221218
final var editButton = CodeReviewCommentUIUtil.INSTANCE.createEditButton(e -> {
222219
panelHandle.showAndFocusEditor();
223220
return null;
@@ -235,7 +232,7 @@ private JComponent createCommentComponent(RadDiscussion com) {
235232
actionsPanel.add(editButton);
236233
actionsPanel.add(deleteButton);
237234
}
238-
commentPanel = createTimeLineItem(contentPanel, actionsPanel, com.author.generateLabelText(cli), com.timestamp);
235+
commentPanel = createTimeLineItem(contentPanel, actionsPanel, com.author == null ? "" : com.author.generateLabelText(cli), com.timestamp);
239236
myMainPanel.add(commentPanel);
240237
myMainPanel.setName(JPANEL_PREFIX_NAME + com.id);
241238
return myMainPanel;

src/main/java/network/radicle/jetbrains/radiclejetbrainsplugin/toolwindow/DragAndDropField.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,21 +37,23 @@ public class DragAndDropField extends EditorTextField {
3737
private static final Logger logger = LoggerFactory.getLogger(DragAndDropField.class);
3838
private int border = 0;
3939
private final boolean enableDragAndDrop;
40+
private final boolean oneLine;
4041
private final FileService fileService;
4142
private final Project project;
4243
private List<Embed> embedList;
4344

44-
public DragAndDropField(Project project, boolean allowDragAndDrop) {
45+
public DragAndDropField(Project project, boolean allowDragAndDrop, boolean oneLine) {
4546
this.enableDragAndDrop = allowDragAndDrop;
47+
this.oneLine = oneLine;
4648
this.fileService = project.getService(FileService.class);
4749
this.embedList = new ArrayList<>();
4850
this.project = project;
4951
this.putClientProperty(UIUtil.HIDE_EDITOR_FROM_DATA_CONTEXT_PROPERTY, true);
5052
this.addDocumentListener(new MyListener(this));
5153
}
5254

53-
public DragAndDropField(Project project, int border, boolean allowDragAndDrop) {
54-
this(project, allowDragAndDrop);
55+
public DragAndDropField(Project project, int border, boolean allowDragAndDrop, boolean oneLine) {
56+
this(project, allowDragAndDrop, oneLine);
5557
this.border = border;
5658
}
5759

@@ -60,7 +62,7 @@ public DragAndDropField(Project project, int border, boolean allowDragAndDrop) {
6062
var editor = super.createEditor();
6163
editor.getSettings().setUseSoftWraps(true);
6264
editor.setBorder(JBUI.Borders.empty(border));
63-
editor.setOneLineMode(false);
65+
editor.setOneLineMode(oneLine);
6466
editor.setVerticalScrollbarVisible(true);
6567
editor.getComponent().setOpaque(false);
6668
editor.getScrollPane().setOpaque(false);

src/main/java/network/radicle/jetbrains/radiclejetbrainsplugin/toolwindow/MarkDownEditorPaneFactory.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,8 @@ public MarkDownEditorPaneFactory(String content, Project project, String radProj
5656
public JEditorPane htmlEditorPane() {
5757
var textPane = new JTextPane();
5858
var editorKit = new HTMLEditorKitBuilder();
59-
editorKit.withViewFactoryExtensions(ExtendableHTMLViewFactory.Extensions.WORD_WRAP, HtmlEditorPaneUtil.INSTANCE.getCONTENT_TOOLTIP(),
59+
editorKit.withViewFactoryExtensions(ExtendableHTMLViewFactory.Extensions.WORD_WRAP, ExtendableHTMLViewFactory.Extensions.FIT_TO_WIDTH_IMAGES,
60+
HtmlEditorPaneUtil.INSTANCE.getCONTENT_TOOLTIP(),
6061
HtmlEditorPaneUtil.INSTANCE.getINLINE_ICON_EXTENSION(),
6162
HtmlEditorPaneUtil.INSTANCE.getIMAGES_EXTENSION());
6263
editorKit.withStyleSheet(StyleSheetUtil.getDefaultStyleSheet());

src/main/java/network/radicle/jetbrains/radiclejetbrainsplugin/toolwindow/Utils.java

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -96,9 +96,10 @@ public static String formatReplyMessage(String message, String replyMessage) {
9696

9797
public static JPanel descriptionPanel(
9898
MarkDownEditorPaneFactory editorPane, Project project, String changeTitle, Function<DragAndDropField, Boolean> editAction) {
99-
var panelHandle = new EditablePanelHandler.PanelBuilder(project, editorPane.htmlEditorPane(),
100-
RadicleBundle.message(changeTitle),
101-
new SingleValueModel<>(editorPane.getRawContent()), editAction).build();
99+
var panel = Utils.getVerticalPanel(1);
100+
panel.add(editorPane.htmlEditorPane());
101+
var panelHandle = new EditablePanelHandler.PanelBuilder(project, panel, RadicleBundle.message(changeTitle),
102+
new SingleValueModel<>(editorPane.getRawContent()), editAction).oneLine(false).enableDragAndDrop(false).build();
102103
var contentPanel = panelHandle.panel;
103104
var b = new CodeReviewChatItemUIUtil.Builder(CodeReviewChatItemUIUtil.ComponentType.FULL,
104105
i -> new SingleValueModel<>(new ImageIcon()), contentPanel);
@@ -107,8 +108,10 @@ public static JPanel descriptionPanel(
107108
panelHandle.showAndFocusEditor();
108109
return null;
109110
}));
110-
b.withHeader(contentPanel, actionsPanel);
111-
b.setMaxContentWidth(Integer.MAX_VALUE);
111+
var malakia = new JPanel(null);
112+
malakia.setOpaque(false);
113+
b.withHeader(malakia, actionsPanel);
114+
//b.setMaxContentWidth(Integer.MAX_VALUE);
112115
return (JPanel) b.build();
113116
}
114117

0 commit comments

Comments
 (0)