Added bottom status bar
This commit is contained in:
parent
ca32f7c551
commit
3bea4f22e8
6
src/main/kotlin/app/git/UserInfo.kt
Normal file
6
src/main/kotlin/app/git/UserInfo.kt
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
package app.git
|
||||||
|
|
||||||
|
data class UserInfo(
|
||||||
|
val name: String?,
|
||||||
|
val email: String?,
|
||||||
|
)
|
@ -9,15 +9,16 @@ import androidx.compose.foundation.shape.RoundedCornerShape
|
|||||||
import androidx.compose.material.MaterialTheme
|
import androidx.compose.material.MaterialTheme
|
||||||
import androidx.compose.material.Text
|
import androidx.compose.material.Text
|
||||||
import androidx.compose.runtime.*
|
import androidx.compose.runtime.*
|
||||||
|
import androidx.compose.ui.Alignment
|
||||||
import androidx.compose.ui.Modifier
|
import androidx.compose.ui.Modifier
|
||||||
import androidx.compose.ui.graphics.Color
|
import androidx.compose.ui.graphics.Color
|
||||||
import androidx.compose.ui.graphics.SolidColor
|
import androidx.compose.ui.graphics.SolidColor
|
||||||
import androidx.compose.ui.input.pointer.PointerIcon
|
import androidx.compose.ui.input.pointer.PointerIcon
|
||||||
import androidx.compose.ui.input.pointer.pointerHoverIcon
|
import androidx.compose.ui.input.pointer.pointerHoverIcon
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
|
import androidx.compose.ui.unit.sp
|
||||||
import app.git.DiffEntryType
|
import app.git.DiffEntryType
|
||||||
import app.theme.borderColor
|
import app.theme.*
|
||||||
import app.theme.primaryTextColor
|
|
||||||
import app.ui.dialogs.NewBranchDialog
|
import app.ui.dialogs.NewBranchDialog
|
||||||
import app.ui.dialogs.RebaseInteractive
|
import app.ui.dialogs.RebaseInteractive
|
||||||
import app.ui.dialogs.StashWithMessageDialog
|
import app.ui.dialogs.StashWithMessageDialog
|
||||||
@ -42,6 +43,7 @@ fun RepositoryOpenPage(tabViewModel: TabViewModel) {
|
|||||||
val selectedItem by tabViewModel.selectedItem.collectAsState()
|
val selectedItem by tabViewModel.selectedItem.collectAsState()
|
||||||
val blameState by tabViewModel.blameState.collectAsState()
|
val blameState by tabViewModel.blameState.collectAsState()
|
||||||
val showHistory by tabViewModel.showHistory.collectAsState()
|
val showHistory by tabViewModel.showHistory.collectAsState()
|
||||||
|
val userInfo by tabViewModel.userInfo.collectAsState()
|
||||||
|
|
||||||
var showNewBranchDialog by remember { mutableStateOf(false) }
|
var showNewBranchDialog by remember { mutableStateOf(false) }
|
||||||
var showStashWithMessageDialog by remember { mutableStateOf(false) }
|
var showStashWithMessageDialog by remember { mutableStateOf(false) }
|
||||||
@ -79,19 +81,42 @@ fun RepositoryOpenPage(tabViewModel: TabViewModel) {
|
|||||||
Text("Rebase started externally", color = MaterialTheme.colors.primaryTextColor)
|
Text("Rebase started externally", color = MaterialTheme.colors.primaryTextColor)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
Menu(
|
Column(modifier = Modifier.weight(1f)) {
|
||||||
modifier = Modifier
|
Menu(
|
||||||
.padding(top = 4.dp, bottom = 8.dp) // Linear progress bar already take 4 additional dp for top
|
modifier = Modifier
|
||||||
.fillMaxWidth(),
|
.padding(top = 4.dp, bottom = 8.dp) // Linear progress bar already take 4 additional dp for top
|
||||||
menuViewModel = tabViewModel.menuViewModel,
|
.fillMaxWidth(),
|
||||||
onRepositoryOpen = {
|
menuViewModel = tabViewModel.menuViewModel,
|
||||||
openRepositoryDialog(tabViewModel = tabViewModel)
|
onRepositoryOpen = {
|
||||||
},
|
openRepositoryDialog(tabViewModel = tabViewModel)
|
||||||
onCreateBranch = { showNewBranchDialog = true },
|
},
|
||||||
onStashWithMessage = { showStashWithMessageDialog = true },
|
onCreateBranch = { showNewBranchDialog = true },
|
||||||
)
|
onStashWithMessage = { showStashWithMessageDialog = true },
|
||||||
|
)
|
||||||
|
|
||||||
RepoContent(tabViewModel, diffSelected, selectedItem, repositoryState, blameState, showHistory)
|
RepoContent(tabViewModel, diffSelected, selectedItem, repositoryState, blameState, showHistory)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Spacer(
|
||||||
|
modifier = Modifier
|
||||||
|
.height(1.dp)
|
||||||
|
.fillMaxWidth()
|
||||||
|
.background(MaterialTheme.colors.primaryVariant.copy(alpha = 0.2f))
|
||||||
|
)
|
||||||
|
Row(
|
||||||
|
modifier = Modifier
|
||||||
|
.fillMaxWidth()
|
||||||
|
.height(32.dp)
|
||||||
|
.background(MaterialTheme.colors.surface)
|
||||||
|
.padding(horizontal = 16.dp),
|
||||||
|
verticalAlignment = Alignment.CenterVertically,
|
||||||
|
) {
|
||||||
|
Text(
|
||||||
|
text = "${userInfo.name ?: "Name not set"} <${userInfo.email?: "Email not set"}>",
|
||||||
|
color = MaterialTheme.colors.primaryTextColor,
|
||||||
|
fontSize = 12.sp,
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -194,7 +219,7 @@ fun MainContentView(
|
|||||||
else -> {
|
else -> {
|
||||||
val diffViewModel = tabViewModel.diffViewModel
|
val diffViewModel = tabViewModel.diffViewModel
|
||||||
|
|
||||||
if(diffViewModel != null) {
|
if (diffViewModel != null) {
|
||||||
Diff(
|
Diff(
|
||||||
diffViewModel = diffViewModel,
|
diffViewModel = diffViewModel,
|
||||||
onCloseDiffView = {
|
onCloseDiffView = {
|
||||||
|
@ -19,6 +19,7 @@ import org.eclipse.jgit.blame.BlameResult
|
|||||||
import org.eclipse.jgit.lib.Repository
|
import org.eclipse.jgit.lib.Repository
|
||||||
import org.eclipse.jgit.lib.RepositoryState
|
import org.eclipse.jgit.lib.RepositoryState
|
||||||
import org.eclipse.jgit.revwalk.RevCommit
|
import org.eclipse.jgit.revwalk.RevCommit
|
||||||
|
import org.eclipse.jgit.storage.file.FileBasedConfig
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
import javax.inject.Provider
|
import javax.inject.Provider
|
||||||
@ -87,6 +88,9 @@ class TabViewModel @Inject constructor(
|
|||||||
private val _showHistory = MutableStateFlow(false)
|
private val _showHistory = MutableStateFlow(false)
|
||||||
val showHistory: StateFlow<Boolean> = _showHistory
|
val showHistory: StateFlow<Boolean> = _showHistory
|
||||||
|
|
||||||
|
private val _userInfo = MutableStateFlow(UserInfo(null, null))
|
||||||
|
val userInfo: StateFlow<UserInfo> = _userInfo
|
||||||
|
|
||||||
var historyViewModel: HistoryViewModel? = null
|
var historyViewModel: HistoryViewModel? = null
|
||||||
private set
|
private set
|
||||||
|
|
||||||
@ -181,9 +185,29 @@ class TabViewModel @Inject constructor(
|
|||||||
printLog(TAG, "Refreshing repository state $newRepoState")
|
printLog(TAG, "Refreshing repository state $newRepoState")
|
||||||
_repositoryState.value = newRepoState
|
_repositoryState.value = newRepoState
|
||||||
|
|
||||||
|
loadConfigInfo(git)
|
||||||
|
|
||||||
onRepositoryStateChanged(newRepoState)
|
onRepositoryStateChanged(newRepoState)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun loadConfigInfo(git: Git) {
|
||||||
|
val config = git.repository.config
|
||||||
|
config.load()
|
||||||
|
val userName = config.getString("user", null, "name")
|
||||||
|
val email = config.getString("user", null, "email")
|
||||||
|
|
||||||
|
// TODO Load file-specific config
|
||||||
|
// val fcfg = FileBasedConfig((config as FileBasedConfig).file, git.repository.fs)
|
||||||
|
// fcfg.load()
|
||||||
|
// val fname = fcfg.getString("user", null, "name")
|
||||||
|
// val fmail = fcfg.getString("user", null, "email")
|
||||||
|
// println("Fname $fname\nFmail $fmail")
|
||||||
|
|
||||||
|
println(userName)
|
||||||
|
println(email)
|
||||||
|
_userInfo.value = UserInfo(userName, email)
|
||||||
|
}
|
||||||
|
|
||||||
private fun onRepositoryStateChanged(newRepoState: RepositoryState) {
|
private fun onRepositoryStateChanged(newRepoState: RepositoryState) {
|
||||||
if (newRepoState != RepositoryState.REBASING_INTERACTIVE && rebaseInteractiveViewModel != null) {
|
if (newRepoState != RepositoryState.REBASING_INTERACTIVE && rebaseInteractiveViewModel != null) {
|
||||||
rebaseInteractiveViewModel?.cancel()
|
rebaseInteractiveViewModel?.cancel()
|
||||||
@ -309,7 +333,7 @@ class TabViewModel @Inject constructor(
|
|||||||
val diffSelected = diffSelected.value
|
val diffSelected = diffSelected.value
|
||||||
|
|
||||||
if (diffSelected != null) {
|
if (diffSelected != null) {
|
||||||
if(diffViewModel == null) { // Initialize the view model if required
|
if (diffViewModel == null) { // Initialize the view model if required
|
||||||
diffViewModel = diffViewModelProvider.get()
|
diffViewModel = diffViewModelProvider.get()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user