mirror of
https://github.com/carlrobertoh/ProxyAI.git
synced 2026-05-11 21:31:04 +00:00
feat: replace editor pane with action links
This commit is contained in:
parent
ee4d1e8da6
commit
6824fbeb3b
1 changed files with 30 additions and 31 deletions
|
|
@ -1,25 +1,22 @@
|
|||
package ee.carlrobert.codegpt.toolwindow.chat.ui;
|
||||
|
||||
import static java.lang.String.format;
|
||||
import static javax.swing.event.HyperlinkEvent.EventType.ACTIVATED;
|
||||
|
||||
import com.intellij.icons.AllIcons.General;
|
||||
import com.intellij.openapi.fileEditor.FileEditorManager;
|
||||
import com.intellij.openapi.fileTypes.FileTypeManager;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.io.FileUtil;
|
||||
import com.intellij.openapi.vfs.LocalFileSystem;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.ui.components.ActionLink;
|
||||
import com.intellij.util.ui.JBUI;
|
||||
import ee.carlrobert.codegpt.ui.UIUtil;
|
||||
import java.awt.BorderLayout;
|
||||
import java.awt.event.ItemEvent;
|
||||
import java.nio.file.Paths;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.stream.Collectors;
|
||||
import javax.swing.BorderFactory;
|
||||
import javax.swing.Box;
|
||||
import javax.swing.BoxLayout;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.JTextPane;
|
||||
import javax.swing.JToggleButton;
|
||||
import javax.swing.SwingConstants;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
|
@ -32,37 +29,39 @@ public class SelectedFilesAccordion extends JPanel {
|
|||
super(new BorderLayout());
|
||||
setOpaque(false);
|
||||
|
||||
var contentPanel = createContentPane(project, referencedFilePaths);
|
||||
var contentPanel = createContentPanel(project, referencedFilePaths);
|
||||
add(createToggleButton(contentPanel, referencedFilePaths.size()), BorderLayout.NORTH);
|
||||
add(contentPanel, BorderLayout.CENTER);
|
||||
}
|
||||
|
||||
private JTextPane createContentPane(Project project, List<String> referencedFilePaths) {
|
||||
var textPane = UIUtil.createTextPane(
|
||||
getHtml(referencedFilePaths),
|
||||
false,
|
||||
event -> {
|
||||
if (FileUtil.exists(event.getDescription()) && ACTIVATED.equals(event.getEventType())) {
|
||||
VirtualFile file = LocalFileSystem.getInstance().findFileByPath(event.getDescription());
|
||||
FileEditorManager.getInstance(project).openFile(Objects.requireNonNull(file), true);
|
||||
}
|
||||
private JPanel createContentPanel(Project project, List<String> referencedFilePaths) {
|
||||
var panel = new JPanel();
|
||||
panel.setOpaque(false);
|
||||
panel.setVisible(false);
|
||||
panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
|
||||
panel.setBorder(JBUI.Borders.emptyBottom(4));
|
||||
referencedFilePaths.stream()
|
||||
.map(filePath -> LocalFileSystem.getInstance().findFileByPath(filePath))
|
||||
.filter(Objects::nonNull)
|
||||
.map(virtualFile -> {
|
||||
var actionLink = new ActionLink(
|
||||
Paths.get(virtualFile.getPath()).getFileName().toString(),
|
||||
(event) -> {
|
||||
FileEditorManager.getInstance(project)
|
||||
.openFile(Objects.requireNonNull(virtualFile), true);
|
||||
});
|
||||
actionLink.setIcon(
|
||||
FileTypeManager.getInstance().getFileTypeByFile(virtualFile).getIcon());
|
||||
return actionLink;
|
||||
})
|
||||
.forEach(link -> {
|
||||
panel.add(link);
|
||||
panel.add(Box.createVerticalStrut(4));
|
||||
});
|
||||
textPane.setBorder(JBUI.Borders.emptyBottom(8));
|
||||
textPane.setVisible(false);
|
||||
return textPane;
|
||||
return panel;
|
||||
}
|
||||
|
||||
private String getHtml(List<String> referencedFilePaths) {
|
||||
var html = referencedFilePaths.stream()
|
||||
.map(filePath -> format(
|
||||
"<li><a href=\"%s\">%s</a></li>",
|
||||
filePath,
|
||||
Paths.get(filePath).getFileName().toString()))
|
||||
.collect(Collectors.joining());
|
||||
return format("<ul style=\"margin: 4px 12px;\">%s</ul>", html);
|
||||
}
|
||||
|
||||
private JToggleButton createToggleButton(JTextPane contentPane, int fileCount) {
|
||||
private JToggleButton createToggleButton(JPanel contentPane, int fileCount) {
|
||||
var accordionToggle = new JToggleButton(
|
||||
format("Referenced files (+%d)", fileCount), General.ArrowDown);
|
||||
accordionToggle.setFocusPainted(false);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue