From ee4d1e8da698861e3651f18b1d5442a2630df9f3 Mon Sep 17 00:00:00 2001 From: Carl-Robert Linnupuu Date: Wed, 13 Dec 2023 14:52:59 +0200 Subject: [PATCH] feat: improve multi-file selection dialog UI --- .../actions/IncludeFilesInContextAction.java | 24 +++++++++++++------ .../indexes/FolderStructureTreePanel.java | 13 +--------- .../codegpt/util/file/FileUtil.java | 11 +++++++++ 3 files changed, 29 insertions(+), 19 deletions(-) diff --git a/src/main/java/ee/carlrobert/codegpt/actions/IncludeFilesInContextAction.java b/src/main/java/ee/carlrobert/codegpt/actions/IncludeFilesInContextAction.java index f0684b87..30121870 100644 --- a/src/main/java/ee/carlrobert/codegpt/actions/IncludeFilesInContextAction.java +++ b/src/main/java/ee/carlrobert/codegpt/actions/IncludeFilesInContextAction.java @@ -20,6 +20,7 @@ import com.intellij.ui.components.JBLabel; import com.intellij.ui.components.JBTextArea; import com.intellij.util.ui.FormBuilder; import com.intellij.util.ui.JBUI; +import com.intellij.util.ui.UI.PanelFactory; import ee.carlrobert.codegpt.CodeGPTBundle; import ee.carlrobert.codegpt.CodeGPTKeys; import ee.carlrobert.codegpt.EncodingManager; @@ -28,6 +29,7 @@ import ee.carlrobert.codegpt.ui.UIUtil; import ee.carlrobert.codegpt.ui.checkbox.FileCheckboxTree; import ee.carlrobert.codegpt.ui.checkbox.PsiElementCheckboxTree; import ee.carlrobert.codegpt.ui.checkbox.VirtualFileCheckboxTree; +import ee.carlrobert.codegpt.util.file.FileUtil; import ee.carlrobert.embedding.CheckedFile; import java.awt.Dimension; import java.io.IOException; @@ -159,10 +161,10 @@ public class IncludeFilesInContextAction extends AnAction { private void updateText() { setText(format( - "%d %s totaling %d tokens", + "%d %s totaling %s tokens", fileCount, fileCount == 1 ? "file" : "files", - totalTokens)); + FileUtil.convertLongValue(totalTokens))); } private int calculateTotalTokens(List checkedFiles) { @@ -187,13 +189,21 @@ public class IncludeFilesInContextAction extends AnAction { dialogBuilder.setNorthPanel(FormBuilder.createFormBuilder() .addLabeledComponent( CodeGPTBundle.get("action.includeFilesInContext.dialog.promptTemplate.label"), - promptTemplateTextArea, - true) - .addLabeledComponent( - CodeGPTBundle.get("action.includeFilesInContext.dialog.repeatableContext.label"), - repeatableContextTextArea, + PanelFactory.panel(promptTemplateTextArea).withComment( + "

The template that will be used to create the final prompt. " + + "The {REPEATABLE_CONTEXT} placeholder must be included " + + "to correctly map the file contents.

") + .createPanel(), true) .addVerticalGap(4) + .addLabeledComponent( + CodeGPTBundle.get("action.includeFilesInContext.dialog.repeatableContext.label"), + PanelFactory.panel(repeatableContextTextArea).withComment( + "

The context that will be repeated for each included file. " + + "Acceptable placeholders include {FILE_PATH} and " + + "{FILE_CONTENT}.

") + .createPanel(), + true) .addComponent(JBUI.Panels.simplePanel() .addToRight(getRestoreButton(promptTemplateTextArea, repeatableContextTextArea))) .addVerticalGap(16) diff --git a/src/main/java/ee/carlrobert/codegpt/indexes/FolderStructureTreePanel.java b/src/main/java/ee/carlrobert/codegpt/indexes/FolderStructureTreePanel.java index 50c4bc31..86f143e3 100644 --- a/src/main/java/ee/carlrobert/codegpt/indexes/FolderStructureTreePanel.java +++ b/src/main/java/ee/carlrobert/codegpt/indexes/FolderStructureTreePanel.java @@ -125,7 +125,7 @@ public class FolderStructureTreePanel { } else { panel.add(new JBLabel("Total size: " + FileUtil.convertFileSize(totalSize) + " ~ " - + (convertLongValue(totalSize / 4)) + " tokens " + " ~ " + + (FileUtil.convertLongValue(totalSize / 4)) + " tokens " + " ~ " + new DecimalFormat("#.##") .format(((double) (totalSize / 4) / 1000) * 0.0001) + " $")); } @@ -220,17 +220,6 @@ public class FolderStructureTreePanel { }; } - private static String convertLongValue(long value) { - if (value >= 1_000_000) { - return value / 1_000_000 + "M"; - } - if (value >= 1_000) { - return value / 1_000 + "K"; - } - - return String.valueOf(value); - } - private static final List ignoredFileDirectories = List.of( "node_modules", ".git", diff --git a/src/main/java/ee/carlrobert/codegpt/util/file/FileUtil.java b/src/main/java/ee/carlrobert/codegpt/util/file/FileUtil.java index e0f6a551..1ec5746d 100644 --- a/src/main/java/ee/carlrobert/codegpt/util/file/FileUtil.java +++ b/src/main/java/ee/carlrobert/codegpt/util/file/FileUtil.java @@ -162,6 +162,17 @@ public class FileUtil { return new DecimalFormat("#.##").format(fileSize) + " " + units[unitIndex]; } + public static String convertLongValue(long value) { + if (value >= 1_000_000) { + return value / 1_000_000 + "M"; + } + if (value >= 1_000) { + return value / 1_000 + "K"; + } + + return String.valueOf(value); + } + private static Optional> findFirstExtension( List languageFileExtensionMappings, String language) {