| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- package org.mjdev.desktop.main
- import android.annotation.SuppressLint
- import androidx.compose.foundation.layout.Box
- import androidx.compose.foundation.layout.PaddingValues
- import androidx.compose.foundation.layout.fillMaxHeight
- import androidx.compose.foundation.layout.fillMaxSize
- import androidx.compose.foundation.layout.size
- import androidx.compose.foundation.layout.wrapContentSize
- import androidx.compose.runtime.Composable
- import androidx.compose.runtime.getValue
- import androidx.compose.ui.Alignment
- import androidx.compose.ui.Modifier
- import androidx.compose.ui.tooling.preview.Devices
- import androidx.compose.ui.tooling.preview.Preview
- import androidx.compose.ui.unit.dp
- import androidx.compose.ui.unit.max
- import org.mjdev.desktop.components.appsmenu.AppsMenu
- import org.mjdev.desktop.components.appsmenu.AppsMenuState.Companion.rememberAppsMenuState
- import org.mjdev.desktop.components.controlcenter.ControlCenter
- import org.mjdev.desktop.components.desktop.Desktop
- import org.mjdev.desktop.components.desktoppanel.DesktopPanel
- import org.mjdev.desktop.components.sliding.base.VisibilityState.Companion.rememberVisibilityState
- import org.mjdev.desktop.components.tooltip.TooltipState
- import org.mjdev.desktop.components.tooltip.rememberTooltipState
- import org.mjdev.desktop.context.DesktopContextScope.Companion.withDesktopContext
- import org.mjdev.desktop.extensions.Compose.isDesign
- import org.mjdev.desktop.extensions.Compose.preview
- import org.mjdev.desktop.extensions.LaunchedEffect.runAsync
- import org.mjdev.desktop.extensions.MutableStateExt.rememberCalculated
- import org.mjdev.desktop.components.desktop.widgets.MemoryChart
- @SuppressLint("ComposableNaming")
- @Composable
- fun MainView() = withDesktopContext {
- val tooltipState: TooltipState = rememberTooltipState()
- val appsMenuState = rememberAppsMenuState(
- visible = isDesign
- )
- val controlCenterState = rememberVisibilityState(
- visible = isDesign
- )
- val panelState = rememberVisibilityState(
- visible = isDesign || !panelAutoHideEnabled,
- enabled = panelAutoHideEnabled,
- autoHideDelay = panelHideDelay
- )
- val bottomPadding by rememberCalculated(
- panelState.enabled, panelState.height
- ) {
- if (panelState.enabled) 0.dp
- else max(0.dp, panelState.height)
- }
- // val installWindowState = rememberVisibilityState()
- // val infoWindowState = rememberVisibilityState(false) //(api.isFirstStart || api.isDebug) // todo
- val onTooltip: (item: Any?) -> Unit = { item ->
- println("Showing tooltip : $item")
- tooltipState.show(item)
- }
- // todo not showing nothing
- Box(
- modifier = Modifier.fillMaxSize(),
- contentAlignment = Alignment.Center
- ) {
- // todo, something prevent preview
- if (!isDesign) {
- Desktop(
- tooltipState = tooltipState,
- onTooltip = onTooltip,
- padding = PaddingValues(
- bottom = bottomPadding
- ),
- widgets = {
- MemoryChart(
- modifier = Modifier
- .size(350.dp, 300.dp)
- .align(Alignment.BottomEnd)
- )
- }, onLeftMouseClick = {
- runAsync {
- panelState.hide()
- appsMenuState.hide()
- controlCenterState.hide()
- }
- }, onRightMouseClick = {
- // contextMenuState.show()
- })
- }
- DesktopPanel(panelState = panelState, onTooltip = onTooltip, onMenuIconClicked = {
- runAsync {
- appsMenuState.show()
- }
- })
- ControlCenter(
- modifier = Modifier
- .fillMaxHeight()
- .align(Alignment.TopEnd),
- controlCenterState = controlCenterState,
- onTooltip = onTooltip,
- )
- AppsMenu(
- modifier = Modifier
- .wrapContentSize()
- .align(Alignment.BottomStart),
- appsMenuState = appsMenuState,
- panelState = panelState,
- onAppClick = { app ->
- runAsync {
- app.start()
- appsMenuState.hide()
- }
- },
- onAppContextMenuClick = {},
- onCategoryContextMenuClick = {},
- onUserAvatarClick = {},
- onActionClick = {},
- onTooltip = onTooltip,
- )
- }
- }
- @Preview(device = Devices.TABLET)
- @Composable
- fun MainViewPreview() = preview {
- MainView()
- }
|