mirror of
https://github.com/carlrobertoh/ProxyAI.git
synced 2026-05-22 03:30:04 +00:00
83 lines
3.1 KiB
Java
83 lines
3.1 KiB
Java
package ee.carlrobert.codegpt.toolwindow.conversations;
|
|
|
|
import com.intellij.openapi.actionSystem.ActionManager;
|
|
import com.intellij.openapi.actionSystem.DefaultActionGroup;
|
|
import com.intellij.openapi.project.Project;
|
|
import com.intellij.openapi.roots.ui.componentsList.components.ScrollablePanel;
|
|
import com.intellij.openapi.ui.SimpleToolWindowPanel;
|
|
import com.intellij.ui.components.JBScrollPane;
|
|
import com.intellij.util.ui.JBFont;
|
|
import com.intellij.util.ui.JBUI;
|
|
import ee.carlrobert.codegpt.actions.toolwindow.DeleteAllConversationsAction;
|
|
import ee.carlrobert.codegpt.actions.toolwindow.MoveDownAction;
|
|
import ee.carlrobert.codegpt.actions.toolwindow.MoveUpAction;
|
|
import ee.carlrobert.codegpt.conversations.ConversationService;
|
|
import javax.swing.Box;
|
|
import javax.swing.BoxLayout;
|
|
import javax.swing.JLabel;
|
|
import javax.swing.JPanel;
|
|
import javax.swing.JScrollPane;
|
|
import javax.swing.ScrollPaneConstants;
|
|
import org.jetbrains.annotations.NotNull;
|
|
|
|
public class ConversationsToolWindow extends JPanel {
|
|
|
|
private final Project project;
|
|
private final ConversationService conversationService;
|
|
private final ScrollablePanel scrollablePanel;
|
|
private final JScrollPane scrollPane;
|
|
|
|
public ConversationsToolWindow(@NotNull Project project) {
|
|
this.project = project;
|
|
this.conversationService = ConversationService.getInstance();
|
|
scrollablePanel = new ScrollablePanel();
|
|
scrollablePanel.setLayout(new BoxLayout(scrollablePanel, BoxLayout.Y_AXIS));
|
|
|
|
scrollPane = new JBScrollPane();
|
|
scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
|
|
scrollPane.setViewportView(scrollablePanel);
|
|
scrollPane.setBorder(null);
|
|
scrollPane.setViewportBorder(null);
|
|
refresh();
|
|
}
|
|
|
|
public JPanel getContent() {
|
|
SimpleToolWindowPanel panel = new SimpleToolWindowPanel(true);
|
|
panel.setContent(scrollPane);
|
|
|
|
var actionGroup = new DefaultActionGroup("TOOLBAR_ACTION_GROUP", false);
|
|
actionGroup.add(new MoveDownAction(this::refresh));
|
|
actionGroup.add(new MoveUpAction(this::refresh));
|
|
actionGroup.addSeparator();
|
|
actionGroup.add(new DeleteAllConversationsAction(this::refresh));
|
|
|
|
var toolbar = ActionManager.getInstance()
|
|
.createActionToolbar("NAVIGATION_BAR_TOOLBAR", actionGroup, true);
|
|
toolbar.setTargetComponent(panel);
|
|
panel.setToolbar(toolbar.getComponent());
|
|
return panel;
|
|
}
|
|
|
|
public void refresh() {
|
|
scrollablePanel.removeAll();
|
|
|
|
var sortedConversations = conversationService.getSortedConversations();
|
|
if (sortedConversations.isEmpty()) {
|
|
var emptyLabel = new JLabel("No conversations exist.");
|
|
emptyLabel.setFont(JBFont.h2());
|
|
emptyLabel.setBorder(JBUI.Borders.empty(8));
|
|
scrollablePanel.add(emptyLabel);
|
|
} else {
|
|
sortedConversations.forEach(conversation -> {
|
|
scrollablePanel.add(Box.createVerticalStrut(8));
|
|
scrollablePanel.add(new ConversationPanel(project, conversation, () -> {
|
|
ConversationService.getInstance().deleteConversation(conversation);
|
|
refresh();
|
|
}));
|
|
});
|
|
}
|
|
|
|
scrollablePanel.revalidate();
|
|
scrollablePanel.repaint();
|
|
}
|
|
}
|