IDEA-155327 Improvement to automated Branch Name in the Open Task dialog

adding placeholders
This commit is contained in:
Dmitry Avdeev
2018-10-09 15:50:31 +03:00
parent f10698f462
commit a5abd5e510
3 changed files with 46 additions and 3 deletions
@@ -7,6 +7,7 @@ import com.intellij.openapi.editor.ex.EditorEx;
import com.intellij.openapi.editor.ex.FoldingModelEx;
import com.intellij.ui.components.JBScrollBar;
import com.intellij.ui.components.fields.ExpandableSupport;
import com.intellij.ui.components.fields.ExtendableTextComponent;
import com.intellij.util.Function;
import com.intellij.util.ui.JBUI;
import org.jetbrains.annotations.NotNull;
@@ -36,9 +37,16 @@ public class ExpandableEditorSupport extends ExpandableSupport<EditorTextField>
}
protected void initFieldEditor(@NotNull EditorEx editor, Color background) {
JLabel label = ExpandableSupport.createLabel(createExpandExtension());
label.setBorder(JBUI.Borders.empty(2, 2, 2, 0));
editor.getContentComponent().putClientProperty(Expandable.class, this);
ExtendableTextComponent.Extension extension = createExpandExtension();
setupExtension(editor, background, extension);
}
public static void setupExtension(@NotNull EditorEx editor,
Color background,
ExtendableTextComponent.Extension extension) {
JLabel label = ExpandableSupport.createLabel(extension);
label.setBorder(JBUI.Borders.empty(2, 2, 2, 0));
editor.getScrollPane().setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
editor.getScrollPane().setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
editor.getScrollPane().getVerticalScrollBar().setBackground(background);
@@ -27,7 +27,7 @@ public interface CommitPlaceholderProvider {
ExtensionPointName<CommitPlaceholderProvider> EXTENSION_POINT_NAME = ExtensionPointName.create("com.intellij.tasks.commitPlaceholderProvider");
@NotNull
String[] getPlaceholders(TaskRepository repository);
String[] getPlaceholders(@Nullable TaskRepository repository);
@Nullable
String getPlaceholderValue(LocalTask task, String placeholder);
@@ -15,6 +15,8 @@
*/
package com.intellij.tasks.config;
import com.intellij.icons.AllIcons;
import com.intellij.openapi.command.WriteCommandAction;
import com.intellij.openapi.fileTypes.FileType;
import com.intellij.openapi.fileTypes.FileTypeManager;
import com.intellij.openapi.fileTypes.PlainTextFileType;
@@ -26,20 +28,30 @@ import com.intellij.openapi.options.binding.BindableConfigurable;
import com.intellij.openapi.options.binding.ControlBinder;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.project.ProjectManager;
import com.intellij.openapi.ui.popup.JBPopupFactory;
import com.intellij.openapi.ui.popup.PopupStep;
import com.intellij.openapi.ui.popup.util.BaseListPopupStep;
import com.intellij.openapi.util.NotNullLazyValue;
import com.intellij.tasks.CommitPlaceholderProvider;
import com.intellij.tasks.TaskManager;
import com.intellij.tasks.TaskRepository;
import com.intellij.tasks.impl.BaseRepositoryImpl;
import com.intellij.tasks.impl.TaskManagerImpl;
import com.intellij.ui.EditorTextField;
import com.intellij.ui.ExpandableEditorSupport;
import com.intellij.ui.GuiUtils;
import com.intellij.ui.components.JBCheckBox;
import com.intellij.ui.components.fields.ExtendableTextComponent;
import com.intellij.util.ArrayUtil;
import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.NotNull;
import javax.swing.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
/**
* @author Dmitry Avdeev
@@ -195,6 +207,29 @@ public class TaskConfigurable extends BindableConfigurable implements Searchable
}
Project project = ProjectManager.getInstance().getDefaultProject();
myBranchNameFormat = new EditorTextField(project, fileType);
setupAddAction(myBranchNameFormat);
myChangelistNameFormat = new EditorTextField(project, fileType);
setupAddAction(myChangelistNameFormat);
}
private void setupAddAction(EditorTextField field) {
field.addSettingsProvider(editor -> {
ExtendableTextComponent.Extension extension =
ExtendableTextComponent.Extension.create(AllIcons.General.Add, "Add placeholder", () -> {
Set<String> placeholders = new HashSet<>();
for (CommitPlaceholderProvider provider : CommitPlaceholderProvider.EXTENSION_POINT_NAME.getExtensionList()) {
placeholders.addAll(Arrays.asList(provider.getPlaceholders(null)));
}
JBPopupFactory.getInstance().createListPopup(new BaseListPopupStep<String>("Placeholders", ArrayUtil.toStringArray(placeholders)) {
@Override
public PopupStep onChosen(String selectedValue, boolean finalChoice) {
WriteCommandAction.runWriteCommandAction(myProject, () -> editor.getDocument()
.insertString(editor.getCaretModel().getOffset(), "${" + selectedValue + "}"));
return FINAL_CHOICE;
}
}).showInBestPositionFor(editor);
});
ExpandableEditorSupport.setupExtension(editor, field.getBackground(), extension);
});
}
}