Add a navigation layer into the GameMaster screens.
This commit is contained in:
parent
1ebb7c1400
commit
6213d5ac15
8 changed files with 93 additions and 34 deletions
|
|
@ -52,6 +52,7 @@ import com.pixelized.desktop.lwa.ui.navigation.window.destination.RollHistoryWin
|
|||
import com.pixelized.desktop.lwa.ui.navigation.window.rememberMaxWindowHeight
|
||||
import com.pixelized.desktop.lwa.ui.overlay.roll.RollHostState
|
||||
import com.pixelized.desktop.lwa.ui.screen.characterSheet.CharacterSheetMainNavHost
|
||||
import com.pixelized.desktop.lwa.ui.screen.gamemaster.GameMasterNavHost
|
||||
import com.pixelized.desktop.lwa.ui.screen.gamemaster.GameMasterScreen
|
||||
import com.pixelized.desktop.lwa.ui.screen.rollhistory.RollHistoryPage
|
||||
import com.pixelized.desktop.lwa.ui.theme.LwaTheme
|
||||
|
|
@ -184,7 +185,7 @@ private fun WindowsHandler(
|
|||
is RollHistoryWindow -> RollHistoryPage()
|
||||
|
||||
is GameMasterWindow -> LwaScaffold {
|
||||
GameMasterScreen()
|
||||
GameMasterNavHost()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ import kotlinx.coroutines.flow.update
|
|||
import kotlinx.coroutines.launch
|
||||
|
||||
class AlterationStore(
|
||||
private val networkRepository: NetworkRepository,
|
||||
private val network: NetworkRepository,
|
||||
private val factory: AlterationJsonFactory,
|
||||
private val client: LwaClient,
|
||||
) {
|
||||
|
|
@ -26,7 +26,7 @@ class AlterationStore(
|
|||
val scope = CoroutineScope(Dispatchers.IO + Job())
|
||||
// data update through WebSocket.
|
||||
scope.launch {
|
||||
networkRepository.data.collect(::handleMessage)
|
||||
network.data.collect(::handleMessage)
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -16,9 +16,9 @@ import kotlinx.coroutines.flow.update
|
|||
import kotlinx.coroutines.launch
|
||||
|
||||
class CampaignStore(
|
||||
private val client: LwaClient,
|
||||
private val network: NetworkRepository,
|
||||
private val factory: CampaignJsonFactory,
|
||||
private val client: LwaClient,
|
||||
) {
|
||||
private val campaignFlow = MutableStateFlow(value = Campaign.empty())
|
||||
|
||||
|
|
|
|||
|
|
@ -19,9 +19,9 @@ import kotlinx.coroutines.launch
|
|||
|
||||
class CharacterSheetStore(
|
||||
private val alterationStore: AlterationStore,
|
||||
private val client: LwaClient,
|
||||
private val network: NetworkRepository,
|
||||
private val factory: CharacterSheetJsonFactory,
|
||||
private val client: LwaClient,
|
||||
) {
|
||||
private val _previewFlow = MutableStateFlow<List<CharacterSheetPreview>>(value = emptyList())
|
||||
val previewFlow: StateFlow<List<CharacterSheetPreview>> get() = _previewFlow
|
||||
|
|
@ -88,7 +88,6 @@ class CharacterSheetStore(
|
|||
}
|
||||
}
|
||||
|
||||
// TODO check crash
|
||||
@Throws
|
||||
suspend fun updateCharacterSheet(
|
||||
sheet: CharacterSheet,
|
||||
|
|
@ -100,7 +99,6 @@ class CharacterSheetStore(
|
|||
}
|
||||
}
|
||||
|
||||
// TODO check crash
|
||||
@Throws
|
||||
suspend fun deleteCharacterSheet(
|
||||
characterSheetId: String,
|
||||
|
|
|
|||
|
|
@ -0,0 +1,30 @@
|
|||
package com.pixelized.desktop.lwa.ui.navigation.screen.destination.gamemaster
|
||||
|
||||
import androidx.compose.runtime.Stable
|
||||
import androidx.navigation.NavGraphBuilder
|
||||
import androidx.navigation.NavHostController
|
||||
import androidx.navigation.compose.composable
|
||||
import com.pixelized.desktop.lwa.ui.screen.gamemaster.GameMasterScreen
|
||||
|
||||
@Stable
|
||||
object GameMasterDestination {
|
||||
private const val ROUTE = "GameMasterMain"
|
||||
|
||||
fun baseRoute() = ROUTE
|
||||
|
||||
@Stable
|
||||
fun navigationRoute() = ROUTE
|
||||
}
|
||||
|
||||
fun NavGraphBuilder.composableGameMasterMainPage() {
|
||||
composable(
|
||||
route = GameMasterDestination.baseRoute(),
|
||||
) {
|
||||
GameMasterScreen()
|
||||
}
|
||||
}
|
||||
|
||||
fun NavHostController.navigateToGameMasterMainPage() {
|
||||
val route = GameMasterDestination.navigationRoute()
|
||||
navigate(route = route)
|
||||
}
|
||||
|
|
@ -0,0 +1,42 @@
|
|||
package com.pixelized.desktop.lwa.ui.screen.gamemaster
|
||||
|
||||
import androidx.compose.foundation.layout.fillMaxSize
|
||||
import androidx.compose.material.Surface
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.CompositionLocalProvider
|
||||
import androidx.compose.runtime.compositionLocalOf
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.navigation.NavHostController
|
||||
import androidx.navigation.compose.NavHost
|
||||
import androidx.navigation.compose.rememberNavController
|
||||
import com.pixelized.desktop.lwa.ui.navigation.screen.LocalScreenController
|
||||
import com.pixelized.desktop.lwa.ui.navigation.screen.destination.gamemaster.GameMasterDestination
|
||||
import com.pixelized.desktop.lwa.ui.navigation.screen.destination.gamemaster.composableGameMasterAlterationEditPage
|
||||
import com.pixelized.desktop.lwa.ui.navigation.screen.destination.gamemaster.composableGameMasterMainPage
|
||||
|
||||
val LocalGMScreenController = compositionLocalOf<NavHostController> {
|
||||
error("GameMaster NavHost controller is not yet ready")
|
||||
}
|
||||
|
||||
@Composable
|
||||
fun GameMasterNavHost() {
|
||||
val controller = rememberNavController()
|
||||
|
||||
CompositionLocalProvider(
|
||||
LocalScreenController provides controller,
|
||||
LocalGMScreenController provides rememberNavController(),
|
||||
) {
|
||||
Surface(
|
||||
modifier = Modifier.fillMaxSize()
|
||||
) {
|
||||
NavHost(
|
||||
modifier = Modifier.fillMaxSize(),
|
||||
navController = controller,
|
||||
startDestination = GameMasterDestination.navigationRoute(),
|
||||
) {
|
||||
composableGameMasterMainPage()
|
||||
composableGameMasterAlterationEditPage()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -17,7 +17,6 @@ import androidx.compose.material.Switch
|
|||
import androidx.compose.material.Text
|
||||
import androidx.compose.material.TopAppBar
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.CompositionLocalProvider
|
||||
import androidx.compose.runtime.State
|
||||
import androidx.compose.runtime.collectAsState
|
||||
import androidx.compose.ui.Alignment
|
||||
|
|
@ -28,7 +27,6 @@ import androidx.compose.ui.unit.dp
|
|||
import androidx.navigation.NavHostController
|
||||
import androidx.navigation.compose.NavHost
|
||||
import androidx.navigation.compose.rememberNavController
|
||||
import com.pixelized.desktop.lwa.ui.navigation.screen.LocalScreenController
|
||||
import com.pixelized.desktop.lwa.ui.navigation.screen.destination.gamemaster.GMActionDestination
|
||||
import com.pixelized.desktop.lwa.ui.navigation.screen.destination.gamemaster.composableGameMasterActionPage
|
||||
import com.pixelized.desktop.lwa.ui.navigation.screen.destination.gamemaster.composableGameMasterAlterationEditPage
|
||||
|
|
@ -52,35 +50,24 @@ import org.koin.compose.viewmodel.koinViewModel
|
|||
@Composable
|
||||
fun GameMasterScreen(
|
||||
gameMasterViewModel: GameMasterViewModel = koinViewModel(),
|
||||
|
||||
controller: NavHostController = LocalGMScreenController.current,
|
||||
) {
|
||||
val screen = rememberNavController()
|
||||
val gameMaster = gameMasterViewModel.isGameMaster.collectAsState()
|
||||
|
||||
CompositionLocalProvider(
|
||||
LocalScreenController provides screen,
|
||||
) {
|
||||
Surface(
|
||||
modifier = Modifier.fillMaxSize()
|
||||
) {
|
||||
Box {
|
||||
GameMasterContent(
|
||||
modifier = Modifier.fillMaxSize(),
|
||||
controller = screen,
|
||||
gameMaster = gameMaster,
|
||||
onGameMaster = gameMasterViewModel::onGameMaster,
|
||||
onTab = {
|
||||
when (it) {
|
||||
GMTabUio.Actions -> screen.navigateToGameMasterActionPage()
|
||||
GMTabUio.Characters -> screen.navigateToGameMasterCharacterPage()
|
||||
GMTabUio.Alterations -> screen.navigateToGameMasterAlterationPage()
|
||||
GMTabUio.Objects -> screen.navigateToGameMasterObjectPage()
|
||||
}
|
||||
},
|
||||
)
|
||||
GameMasterContent(
|
||||
modifier = Modifier.fillMaxSize(),
|
||||
controller = controller,
|
||||
gameMaster = gameMaster,
|
||||
onGameMaster = gameMasterViewModel::onGameMaster,
|
||||
onTab = {
|
||||
when (it) {
|
||||
GMTabUio.Actions -> controller.navigateToGameMasterActionPage()
|
||||
GMTabUio.Characters -> controller.navigateToGameMasterCharacterPage()
|
||||
GMTabUio.Alterations -> controller.navigateToGameMasterAlterationPage()
|
||||
GMTabUio.Objects -> controller.navigateToGameMasterObjectPage()
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
@Composable
|
||||
|
|
|
|||
|
|
@ -40,6 +40,7 @@ import com.pixelized.desktop.lwa.ui.composable.key.KeyHandler
|
|||
import com.pixelized.desktop.lwa.ui.composable.textfield.LwaTextField
|
||||
import com.pixelized.desktop.lwa.ui.composable.textfield.LwaTextFieldUio
|
||||
import com.pixelized.desktop.lwa.ui.navigation.screen.LocalScreenController
|
||||
import com.pixelized.desktop.lwa.ui.screen.gamemaster.LocalGMScreenController
|
||||
import com.pixelized.desktop.lwa.ui.theme.color.component.LwaButtonColors
|
||||
import com.pixelized.desktop.lwa.ui.theme.lwa
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue