SubwayTooter-Android-App/anko/src/main/java/org/jetbrains/anko/Menus.kt

151 lines
3.3 KiB
Kotlin

package org.jetbrains.anko
import android.view.Menu
import android.view.MenuItem
import android.view.SubMenu
/**
* Create a plain menu item
*/
fun Menu.item(
title: CharSequence, /*@DrawableRes*/
icon: Int = 0,
checkable: Boolean = false,
): MenuItem =
add(title).apply {
setIcon(icon)
isCheckable = checkable
}
/**
* Create a menu item and configure it
*/
inline fun Menu.item(
title: CharSequence, /*@DrawableRes*/
icon: Int = 0,
checkable: Boolean = false,
configure: MenuItem.() -> Unit,
): MenuItem =
add(title).apply {
setIcon(icon)
isCheckable = checkable
configure()
}
/**
* Create a menu item with title from resources
*/
fun Menu.item(
/*@StringRes*/
titleRes: Int, /*@DrawableRes*/
icon: Int = 0,
checkable: Boolean = false,
): MenuItem =
add(titleRes).apply {
setIcon(icon)
isCheckable = checkable
}
/**
* Create a menu item with title from resources and configure it
*/
inline fun Menu.item(
/*@StringRes*/
titleRes: Int, /*@DrawableRes*/
icon: Int = 0,
checkable: Boolean = false,
configure: MenuItem.() -> Unit,
): MenuItem =
add(titleRes).apply {
setIcon(icon)
isCheckable = checkable
configure()
}
/**
* Create a submenu
*/
fun Menu.subMenu(title: CharSequence): SubMenu =
addSubMenu(title)
/**
* Create a submenu and configure it
*/
inline fun Menu.subMenu(title: CharSequence, configure: SubMenu.() -> Unit): SubMenu =
addSubMenu(title).apply { configure() }
/**
* Create a submenu with title from resources
*/
fun Menu.subMenu(/*@StringRes*/ titleRes: Int): SubMenu =
addSubMenu(titleRes)
/**
* Create a submenu with title from resources and configure it
*/
inline fun Menu.subMenu(/*@StringRes*/ titleRes: Int, configure: SubMenu.() -> Unit): SubMenu =
addSubMenu(titleRes).apply { configure() }
/**
* Create a checkable menu item for use in NavigationView
*/
fun Menu.navigationItem(title: CharSequence, /*@DrawableRes*/ icon: Int = 0) {
add(title).apply {
setIcon(icon)
isCheckable = true
}
}
/**
* Create a navigation item with OnClickListener
*/
inline fun Menu.navigationItem(
title: CharSequence, /*@DrawableRes*/
icon: Int = 0,
crossinline onClick: () -> Unit,
) {
add(title).apply {
setIcon(icon)
isCheckable = true
setOnMenuItemClickListener {
onClick()
false
}
}
}
/**
* Create a navigation item with title from resources
*/
fun Menu.navigationItem(/*@StringRes*/ titleRes: Int, /*@DrawableRes*/ icon: Int = 0) {
add(titleRes).apply {
setIcon(icon)
isCheckable = true
}
}
/**
* Create a navigation item with title from resources and onClick listener
*/
inline fun Menu.navigationItem(
/*@StringRes*/
titleRes: Int, /*@DrawableRes*/
icon: Int = 0,
crossinline onClick: () -> Unit,
) {
add(titleRes).apply {
setIcon(icon)
isCheckable = true
setOnMenuItemClickListener {
onClick()
false
}
}
}
/**
* Set OnClickListener on a menu item
*/
inline fun MenuItem.onClick(consume: Boolean = true, crossinline action: () -> Unit) {
setOnMenuItemClickListener { action(); consume }
}