@@ -408,10 +408,7 @@ class TemplateJTree(
408408 */
409409 override fun actionPerformed (event : AnActionEvent ) =
410410 JBPopupFactory .getInstance()
411- .createListPopup(
412- if (selectedNodeNotRoot == null ) DefaultTemplatesPopupStep ()
413- else MainPopupStep ()
414- )
411+ .createListPopup(MainPopupStep (templatesOnly = selectedNodeNotRoot == null ))
415412 .show(preferredPopupPoint)
416413
417414
@@ -422,8 +419,9 @@ class TemplateJTree(
422419 *
423420 * @param schemes the schemes that can be inserted
424421 */
425- private abstract inner class AddSchemePopupStep (schemes : List <Scheme >) :
426- BaseListPopupStep <Scheme >(null , schemes) {
422+ private abstract inner class AbstractPopupStep (
423+ schemes : List <Scheme >,
424+ ) : BaseListPopupStep<Scheme>(null , schemes) {
427425 /* *
428426 * Returns [value]'s icon.
429427 */
@@ -451,6 +449,7 @@ class TemplateJTree(
451449 return null
452450 }
453451
452+
454453 /* *
455454 * Returns `true`.
456455 */
@@ -464,15 +463,22 @@ class TemplateJTree(
464463
465464 /* *
466465 * The top-level [PopupStep], which includes the default templates and various reference types.
466+ *
467+ * @property templatesOnly `true` if and only if non-[Template] schemes cannot be inserted.
467468 */
468- private inner class MainPopupStep : AddSchemePopupStep (POPUP_STEP_SCHEMES ) {
469+ private inner class MainPopupStep ( private val templatesOnly : Boolean ) : AbstractPopupStep (POPUP_STEP_SCHEMES ) {
469470 override fun onChosen (value : Scheme ? , finalChoice : Boolean ) =
470471 when (value) {
471- POPUP_STEP_SCHEMES [0 ] -> DefaultTemplatesPopupStep ()
472+ POPUP_STEP_SCHEMES [0 ] -> TemplatesPopupStep ()
472473 POPUP_STEP_SCHEMES [POPUP_STEP_SCHEMES .size - 1 ] -> ReferencesPopupStep ()
473474 else -> super .onChosen(value, finalChoice)
474475 }
475476
477+ /* *
478+ * Returns `true` if and only if [value] is a [Template] or [templatesOnly] is `false`.
479+ */
480+ override fun isSelectable (value : Scheme ? ) = value is Template || ! templatesOnly
481+
476482 /* *
477483 * Returns `true` if and only if [value] equals the [Template] or [TemplateReference] entry.
478484 */
@@ -490,16 +496,16 @@ class TemplateJTree(
490496 /* *
491497 * A [PopupStep] that shows only the default templates.
492498 */
493- private inner class DefaultTemplatesPopupStep :
494- AddSchemePopupStep (listOf (Template (" Empty" )) + TemplateList .DEFAULT_TEMPLATES )
499+ private inner class TemplatesPopupStep :
500+ AbstractPopupStep (listOf (Template (" Empty" )) + TemplateList .DEFAULT_TEMPLATES )
495501
496502 /* *
497503 * A [PopupStep] that contains a [TemplateReference] for each [Template] that can currently be referenced from
498504 * [selectedTemplate].
499505 *
500506 * Ineligible [Template]s are automatically filtered out.
501507 */
502- private inner class ReferencesPopupStep : AddSchemePopupStep (
508+ private inner class ReferencesPopupStep : AbstractPopupStep (
503509 currentSettings.templates
504510 .filter { selectedTemplate!!.canReference(it) }
505511 .map { TemplateReference (it.uuid) }
0 commit comments