Skip to content

Commit 5700fc9

Browse files
committed
Consistify insertion popup
Fixes #463.
1 parent 8ff7277 commit 5700fc9

File tree

1 file changed

+17
-11
lines changed

1 file changed

+17
-11
lines changed

src/main/kotlin/com/fwdekker/randomness/template/TemplateJTree.kt

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)