Add chat to the campaign screen + change a bit the network UI.
This commit is contained in:
		
							parent
							
								
									3f67e342a7
								
							
						
					
					
						commit
						7a9dd97123
					
				
					 29 changed files with 885 additions and 100 deletions
				
			
		| 
						 | 
				
			
			@ -28,6 +28,8 @@ import androidx.compose.ui.graphics.Shape
 | 
			
		|||
import androidx.compose.ui.unit.Dp
 | 
			
		||||
import androidx.compose.ui.unit.DpSize
 | 
			
		||||
import androidx.compose.ui.unit.dp
 | 
			
		||||
import androidx.compose.ui.unit.max
 | 
			
		||||
import androidx.compose.ui.unit.min
 | 
			
		||||
import androidx.compose.ui.window.ApplicationScope
 | 
			
		||||
import androidx.compose.ui.window.Window
 | 
			
		||||
import androidx.compose.ui.window.rememberWindowState
 | 
			
		||||
| 
						 | 
				
			
			@ -41,6 +43,7 @@ import com.pixelized.desktop.lwa.ui.composable.key.LocalKeyEventHandlers
 | 
			
		|||
import com.pixelized.desktop.lwa.ui.navigation.screen.MainNavHost
 | 
			
		||||
import com.pixelized.desktop.lwa.ui.navigation.screen.destination.CharacterSheetDestination
 | 
			
		||||
import com.pixelized.desktop.lwa.ui.navigation.screen.destination.CharacterSheetEditDestination
 | 
			
		||||
import com.pixelized.desktop.lwa.ui.navigation.window.LocalWindowState
 | 
			
		||||
import com.pixelized.desktop.lwa.ui.navigation.window.WindowController
 | 
			
		||||
import com.pixelized.desktop.lwa.ui.navigation.window.WindowsNavHost
 | 
			
		||||
import com.pixelized.desktop.lwa.ui.navigation.window.destination.CharacterSheetEditWindow
 | 
			
		||||
| 
						 | 
				
			
			@ -49,6 +52,8 @@ import com.pixelized.desktop.lwa.ui.navigation.window.destination.NetworkWindows
 | 
			
		|||
import com.pixelized.desktop.lwa.ui.navigation.window.destination.RollHistoryWindow
 | 
			
		||||
import com.pixelized.desktop.lwa.ui.navigation.window.rememberMaxWindowHeight
 | 
			
		||||
import com.pixelized.desktop.lwa.ui.screen.campaign.CampaignViewModel
 | 
			
		||||
import com.pixelized.desktop.lwa.ui.screen.campaign.chat.CampaignChatViewModel
 | 
			
		||||
import com.pixelized.desktop.lwa.ui.screen.campaign.player.ribbon.PlayerRibbon
 | 
			
		||||
import com.pixelized.desktop.lwa.ui.screen.characterSheet.CharacterSheetMainNavHost
 | 
			
		||||
import com.pixelized.desktop.lwa.ui.screen.network.NetworkPage
 | 
			
		||||
import com.pixelized.desktop.lwa.ui.screen.network.NetworkViewModel
 | 
			
		||||
| 
						 | 
				
			
			@ -78,15 +83,27 @@ val LocalErrorSnackHost = compositionLocalOf<SnackbarHostState> {
 | 
			
		|||
    error("Local Snack Controller is not yet ready")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
val LocalApplicationScope = compositionLocalOf<ApplicationScope> {
 | 
			
		||||
    error("Local application scope is not yet ready")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@Composable
 | 
			
		||||
@Preview
 | 
			
		||||
fun ApplicationScope.App() {
 | 
			
		||||
 | 
			
		||||
    val maxWindowHeight = rememberMaxWindowHeight()
 | 
			
		||||
    val snackHostState = remember { SnackbarHostState() }
 | 
			
		||||
    val errorSnackHostState = remember { SnackbarHostState() }
 | 
			
		||||
    val windowController = remember { WindowController(maxWindowHeight) }
 | 
			
		||||
    val keyEventHandlers = remember { mutableStateListOf<KeyEventHandler>() }
 | 
			
		||||
    val windowsState = rememberWindowState(
 | 
			
		||||
        size = DpSize(
 | 
			
		||||
            width = 800.dp,
 | 
			
		||||
            height = min(
 | 
			
		||||
                a = 56.dp + PlayerRibbon.Default.size.height * 6 + 8.dp * 7 + 40.dp,
 | 
			
		||||
                b = maxWindowHeight,
 | 
			
		||||
            ),
 | 
			
		||||
        ),
 | 
			
		||||
    )
 | 
			
		||||
 | 
			
		||||
    // Coil configuration
 | 
			
		||||
    setSingletonImageLoaderFactory { context ->
 | 
			
		||||
| 
						 | 
				
			
			@ -96,14 +113,16 @@ fun ApplicationScope.App() {
 | 
			
		|||
    }
 | 
			
		||||
 | 
			
		||||
    CompositionLocalProvider(
 | 
			
		||||
        LocalApplicationScope provides this,
 | 
			
		||||
        LocalSnackHost provides snackHostState,
 | 
			
		||||
        LocalErrorSnackHost provides errorSnackHostState,
 | 
			
		||||
        LocalWindowController provides windowController,
 | 
			
		||||
        LocalKeyEventHandlers provides keyEventHandlers,
 | 
			
		||||
        LocalWindowState provides windowsState,
 | 
			
		||||
    ) {
 | 
			
		||||
        Window(
 | 
			
		||||
            onCloseRequest = ::exitApplication,
 | 
			
		||||
            state = rememberWindowState(size = DpSize(width = 800.dp, height = maxWindowHeight)),
 | 
			
		||||
            state = windowsState,
 | 
			
		||||
            title = runBlocking { getString(Res.string.app_name) },
 | 
			
		||||
            onKeyEvent = { event ->
 | 
			
		||||
                keyEventHandlers.reversed().any { it(event) }
 | 
			
		||||
| 
						 | 
				
			
			@ -118,6 +137,7 @@ fun ApplicationScope.App() {
 | 
			
		|||
private fun MainWindowScreen(
 | 
			
		||||
    campaignViewModel: CampaignViewModel = koinViewModel(),
 | 
			
		||||
    networkViewModel: NetworkViewModel = koinViewModel(),
 | 
			
		||||
    campaignChatViewModel: CampaignChatViewModel = koinViewModel(),
 | 
			
		||||
    rollViewModel: RollHistoryViewModel = koinViewModel(),
 | 
			
		||||
) {
 | 
			
		||||
    LaunchedEffect(Unit) {
 | 
			
		||||
| 
						 | 
				
			
			@ -161,7 +181,11 @@ private fun MainWindowScreen(
 | 
			
		|||
                    }
 | 
			
		||||
                },
 | 
			
		||||
                content = {
 | 
			
		||||
                    MainNavHost()
 | 
			
		||||
                    MainNavHost(
 | 
			
		||||
                        campaignViewModel = campaignViewModel,
 | 
			
		||||
                        networkViewModel = networkViewModel,
 | 
			
		||||
                        campaignChatViewModel = campaignChatViewModel,
 | 
			
		||||
                    )
 | 
			
		||||
                }
 | 
			
		||||
            )
 | 
			
		||||
            NetworkSnackHandler(
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue