Skip to content

Latest commit

 

History

History
59 lines (54 loc) · 2.94 KB

action_window.md

File metadata and controls

59 lines (54 loc) · 2.94 KB

Action Window

To replace our default action window, you need to do a lot of works. First, you should be familiar with Jetpack Compose, then you should know all the knowledge of this documentation.

Provide action window by implementing interface top.myrest.myflow.component.ActionWindowProvider:

interface ActionWindowProvider {
    @get:JsonIgnore
    val actionWindowContent: @Composable DialogWindowScope.(defaultIcon: Painter) -> Unit
    fun updateActionResultList(pin: ActionKeywordPin, list: List<ActionResult>)
    fun getActionTextFieldLocationOffset(): Point
    fun getActionTextFieldHeight(): Int
    fun getWindowInitHeight(): Int
    fun getState(): ActionWindowState?
    fun getActiveKeywordPin(onlyActionWindow: Boolean): ActionKeywordPin
    fun setRawTextFieldValue(pin: ActionKeywordPin, textFieldValue: TextFieldValue)
    fun getRawTextFieldValue(): TextFieldValue
    fun pinActionFuncPage(result: ActionFuncPageResult)
    fun pinActionKeyword(pin: ActionKeywordPin)
    fun pinOrOpenExist(pin: ActionKeywordPin): ActionKeywordPin
    fun pinOrOpenExist(result: ActionFuncPageResult): ActionFuncPageResult
    fun getPinnedKeywords(onlyActionWindow: Boolean): List<ActionKeywordPin>
    fun getActionResults(pin: ActionKeywordPin): List<ActionResult>
    fun pinActionResult(pin: ActionKeywordPin, result: ActionResult)
    fun unpinActionResult(pin: ActionKeywordPin, result: ActionResult)
    fun hasFocus(): Boolean
    fun getWindow(pinId: String): MyWindow
    fun getAction(): String = getRawTextFieldValue().text
    fun getSelectedActionResult(pin: ActionKeywordPin): ActionResult? {
        return getActionResults(pin).firstOrNull { it.selected }
    }
    fun setAction(pin: ActionKeywordPin, action: String) {
        setRawTextFieldValue(pin, TextFieldValue(action, TextRange(action.length)))
    }
    fun setAction(pin: ActionKeywordPin, action: String, sendEvent: Boolean) {
        setRawTextFieldValue(pin, TextFieldValue(action, TextRange(action.length)), sendEvent)
    }
    fun setRawTextFieldValue(pin: ActionKeywordPin, textFieldValue: TextFieldValue, sendEvent: Boolean) {
        setRawTextFieldValue(pin, textFieldValue)
        if (sendEvent) {
            Composes.emitActionTextChangedEvent(pin, textFieldValue.text)
        }
    }
    fun pinOrOpenExist(pluginId: String, result: ActionKeywordFuncPageContentResult): ActionFuncPageResult? {
        val funcPage = Composes.apis?.convertFuncPage(pluginId, result)
        return if (funcPage == null) null else pinOrOpenExist(funcPage)
    }
}

interface ActionWindowState {
    fun pinWindow(pin: Boolean = true, keep: Boolean)
    fun restorePinState()
    fun isPinned(): Boolean
    fun showNotify(state: NotifyState = NotifyState.SUCCESS)
}

You can refer our action window to design an action window, to make it more concise, fashionable and gorgeous.