feat: add actions for getting and selecting contest and problem
This commit is contained in:
parent
8b4b8bf540
commit
d44e00afa0
@ -0,0 +1,83 @@
|
||||
package io.gitlab.jfronny.sdom.actions
|
||||
|
||||
import com.intellij.icons.AllIcons
|
||||
import com.intellij.notification.Notification
|
||||
import com.intellij.notification.NotificationAction
|
||||
import com.intellij.openapi.actionSystem.*
|
||||
import com.intellij.openapi.actionSystem.ex.ComboBoxAction
|
||||
import com.intellij.openapi.project.DumbAware
|
||||
import com.intellij.openapi.project.DumbAwareAction
|
||||
import com.intellij.openapi.ui.popup.JBPopup
|
||||
import com.intellij.openapi.ui.popup.JBPopupFactory
|
||||
import com.intellij.openapi.util.Condition
|
||||
import io.gitlab.jfronny.sdom.SDom
|
||||
import io.gitlab.jfronny.sdom.model.Contest
|
||||
import java.awt.Dimension
|
||||
import javax.swing.JComponent
|
||||
|
||||
class SDContestSelectionComboBoxAction : ComboBoxAction(), DumbAware {
|
||||
override fun getActionUpdateThread(): ActionUpdateThread = ActionUpdateThread.BGT
|
||||
|
||||
private val icon = AllIcons.Actions.ListChanges
|
||||
override fun update(e: AnActionEvent) {
|
||||
e.presentation.isEnabledAndVisible = SDom.loggedIn
|
||||
e.presentation.icon = icon
|
||||
SDom.currentContest?.let { e.presentation.setText(it.name, false) }
|
||||
}
|
||||
|
||||
override fun createPopupActionGroup(button: JComponent, dataContext: DataContext): DefaultActionGroup {
|
||||
val actionGroup = DefaultActionGroup()
|
||||
|
||||
actionGroup.addAll(SDom.contests.map { SelectContestAction(it, it == SDom.currentContest) })
|
||||
|
||||
return actionGroup
|
||||
}
|
||||
|
||||
override fun createActionPopup(
|
||||
group: DefaultActionGroup,
|
||||
context: DataContext,
|
||||
disposeCallback: Runnable?
|
||||
): JBPopup {
|
||||
val popup = JBPopupFactory.getInstance().createActionGroupPopup(
|
||||
myPopupTitle,
|
||||
group,
|
||||
context,
|
||||
null,
|
||||
shouldShowDisabledActions(),
|
||||
disposeCallback,
|
||||
maxRows,
|
||||
preselectCondition,
|
||||
null
|
||||
)
|
||||
popup.setMinimumSize(Dimension(minWidth, minHeight))
|
||||
return popup
|
||||
}
|
||||
|
||||
override fun getPreselectCondition(): Condition<AnAction> =
|
||||
Condition<AnAction> { if (it is SelectContestAction) it.isSelected else false }
|
||||
|
||||
override fun shouldShowDisabledActions(): Boolean = true
|
||||
|
||||
private class SelectContestAction(
|
||||
private val contest: Contest,
|
||||
val isSelected: Boolean
|
||||
) : DumbAwareAction() {
|
||||
init {
|
||||
val name = contest.name
|
||||
templatePresentation.setText(name, false)
|
||||
}
|
||||
|
||||
override fun getActionUpdateThread(): ActionUpdateThread = ActionUpdateThread.BGT
|
||||
|
||||
override fun actionPerformed(e: AnActionEvent) {
|
||||
SDom.currentContest = contest
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class SDContestSelectionNotificationAction(text: String) : NotificationAction(text) {
|
||||
constructor() : this("")
|
||||
|
||||
private val selectionAction = SDContestSelectionComboBoxAction()
|
||||
override fun actionPerformed(e: AnActionEvent, notification: Notification) = selectionAction.actionPerformed(e)
|
||||
}
|
@ -0,0 +1,21 @@
|
||||
package io.gitlab.jfronny.sdom.actions
|
||||
|
||||
import com.intellij.openapi.actionSystem.ActionUpdateThread
|
||||
import com.intellij.openapi.actionSystem.AnActionEvent
|
||||
import com.intellij.openapi.project.DumbAwareAction
|
||||
import io.gitlab.jfronny.sdom.SDom
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.Job
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
class SDGetContestsAction : DumbAwareAction() {
|
||||
override fun getActionUpdateThread(): ActionUpdateThread = ActionUpdateThread.BGT
|
||||
|
||||
override fun actionPerformed(e: AnActionEvent) {
|
||||
CoroutineScope(Job() + Dispatchers.IO).launch {
|
||||
SDom.getContests()
|
||||
SDom.loadProperties(e.project)
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,20 @@
|
||||
package io.gitlab.jfronny.sdom.actions
|
||||
|
||||
import com.intellij.openapi.actionSystem.ActionUpdateThread
|
||||
import com.intellij.openapi.actionSystem.AnActionEvent
|
||||
import com.intellij.openapi.project.DumbAwareAction
|
||||
import io.gitlab.jfronny.sdom.SDom
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.Job
|
||||
import kotlinx.coroutines.launch
|
||||
|
||||
class SDGetProblemsAction : DumbAwareAction() {
|
||||
override fun getActionUpdateThread(): ActionUpdateThread = ActionUpdateThread.BGT
|
||||
|
||||
override fun actionPerformed(e: AnActionEvent) {
|
||||
CoroutineScope(Job() + Dispatchers.IO).launch {
|
||||
SDom.getProblems()
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,83 @@
|
||||
package io.gitlab.jfronny.sdom.actions
|
||||
|
||||
import com.intellij.icons.AllIcons
|
||||
import com.intellij.notification.Notification
|
||||
import com.intellij.notification.NotificationAction
|
||||
import com.intellij.openapi.actionSystem.*
|
||||
import com.intellij.openapi.actionSystem.ex.ComboBoxAction
|
||||
import com.intellij.openapi.project.DumbAware
|
||||
import com.intellij.openapi.project.DumbAwareAction
|
||||
import com.intellij.openapi.ui.popup.JBPopup
|
||||
import com.intellij.openapi.ui.popup.JBPopupFactory
|
||||
import com.intellij.openapi.util.Condition
|
||||
import io.gitlab.jfronny.sdom.SDom
|
||||
import io.gitlab.jfronny.sdom.model.Problem
|
||||
import java.awt.Dimension
|
||||
import javax.swing.JComponent
|
||||
|
||||
class SDProblemSelectionComboBoxAction : ComboBoxAction(), DumbAware {
|
||||
override fun getActionUpdateThread(): ActionUpdateThread = ActionUpdateThread.BGT
|
||||
|
||||
private val icon = AllIcons.Actions.ListChanges
|
||||
override fun update(e: AnActionEvent) {
|
||||
e.presentation.isEnabledAndVisible = SDom.loggedIn
|
||||
e.presentation.icon = icon
|
||||
SDom.currentProblem?.let { e.presentation.setText(it.name, false) }
|
||||
}
|
||||
|
||||
override fun createPopupActionGroup(button: JComponent, dataContext: DataContext): DefaultActionGroup {
|
||||
val actionGroup = DefaultActionGroup()
|
||||
|
||||
actionGroup.addAll(SDom.problems.map { SelectProblemAction(it, it == SDom.currentProblem) })
|
||||
|
||||
return actionGroup
|
||||
}
|
||||
|
||||
override fun createActionPopup(
|
||||
group: DefaultActionGroup,
|
||||
context: DataContext,
|
||||
disposeCallback: Runnable?
|
||||
): JBPopup {
|
||||
val popup = JBPopupFactory.getInstance().createActionGroupPopup(
|
||||
myPopupTitle,
|
||||
group,
|
||||
context,
|
||||
null,
|
||||
shouldShowDisabledActions(),
|
||||
disposeCallback,
|
||||
maxRows,
|
||||
preselectCondition,
|
||||
null
|
||||
)
|
||||
popup.setMinimumSize(Dimension(minWidth, minHeight))
|
||||
return popup
|
||||
}
|
||||
|
||||
override fun getPreselectCondition(): Condition<AnAction> =
|
||||
Condition<AnAction> { if (it is SelectProblemAction) it.isSelected else false }
|
||||
|
||||
override fun shouldShowDisabledActions(): Boolean = true
|
||||
|
||||
private class SelectProblemAction(
|
||||
private val problem: Problem,
|
||||
val isSelected: Boolean
|
||||
) : DumbAwareAction() {
|
||||
init {
|
||||
val name = problem.name
|
||||
templatePresentation.setText(name, false)
|
||||
}
|
||||
|
||||
override fun getActionUpdateThread(): ActionUpdateThread = ActionUpdateThread.BGT
|
||||
|
||||
override fun actionPerformed(e: AnActionEvent) {
|
||||
SDom.currentProblem = problem
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
class SDProblemSelectionNotificationAction(text: String) : NotificationAction(text) {
|
||||
constructor() : this("")
|
||||
|
||||
private val selectionAction = SDProblemSelectionComboBoxAction()
|
||||
override fun actionPerformed(e: AnActionEvent, notification: Notification) = selectionAction.actionPerformed(e)
|
||||
}
|
Loading…
Reference in New Issue
Block a user