|
|
@@ -4,21 +4,24 @@ import androidx.compose.material.icons.Icons
|
|
|
import androidx.compose.material.icons.filled.Settings
|
|
|
import androidx.compose.runtime.Composable
|
|
|
import androidx.compose.runtime.DisallowComposableCalls
|
|
|
-import androidx.compose.runtime.remember
|
|
|
import androidx.compose.ui.graphics.Color
|
|
|
import androidx.compose.ui.graphics.vector.ImageVector
|
|
|
+import eu.mjdev.desktop.components.controlcenter.ControlCenterPage.ControlCenterPageScope.PageCache
|
|
|
import eu.mjdev.desktop.provider.DesktopProvider
|
|
|
|
|
|
@Suppress("UNCHECKED_CAST")
|
|
|
class ControlCenterPage(
|
|
|
val icon: ImageVector = Icons.Filled.Settings,
|
|
|
val name: String = "",
|
|
|
- val condition: ControlCenterPageScope.() -> Boolean = { true },
|
|
|
- val content: @Composable ControlCenterPageScope.() -> Unit = {}
|
|
|
+ val condition: DesktopProvider.() -> Boolean = { true },
|
|
|
+ private val saver: IControlCenterPageDataSaver? = null,
|
|
|
+ val cache: PageCache = PageCache(saver),
|
|
|
+ val content: @Composable ControlCenterPageScope.() -> Unit = {},
|
|
|
) {
|
|
|
class ControlCenterPageScope(
|
|
|
+ val api: DesktopProvider,
|
|
|
private val backgroundColorInvoker: () -> Color,
|
|
|
- val api: DesktopProvider
|
|
|
+ private val cache: PageCache
|
|
|
) {
|
|
|
val scope
|
|
|
get() = api.scope
|
|
|
@@ -26,8 +29,6 @@ class ControlCenterPage(
|
|
|
val backgroundColor
|
|
|
get() = backgroundColorInvoker()
|
|
|
|
|
|
- private val cache = PageCache()
|
|
|
-
|
|
|
@Composable
|
|
|
fun <T> remember(
|
|
|
calculation: @DisallowComposableCalls () -> T
|
|
|
@@ -35,7 +36,7 @@ class ControlCenterPage(
|
|
|
|
|
|
@Suppress("unused")
|
|
|
class PageCache(
|
|
|
- private val saver: IDataSaver? = null
|
|
|
+ private val saver: IControlCenterPageDataSaver? = null
|
|
|
) : HashMap<Int, Any>() {
|
|
|
init {
|
|
|
saver?.load()?.onEach { (t, u) -> this[t] = u }
|
|
|
@@ -59,19 +60,4 @@ class ControlCenterPage(
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
- interface IDataSaver {
|
|
|
- fun save(data: Map<Int, Any>)
|
|
|
- fun load(): Map<Int, Any>
|
|
|
- }
|
|
|
-
|
|
|
- companion object {
|
|
|
- @Composable
|
|
|
- fun rememberControlCenterScope(
|
|
|
- backgroundColor: () -> Color,
|
|
|
- api: DesktopProvider
|
|
|
- ) = remember(backgroundColor, api) {
|
|
|
- ControlCenterPageScope(backgroundColor, api)
|
|
|
- }
|
|
|
- }
|
|
|
}
|