Skip to content

Commit

Permalink
Exibição em uma grade de 3 colunas das tablaturas
Browse files Browse the repository at this point in the history
  • Loading branch information
lefranc20 committed Nov 7, 2024
1 parent db50511 commit 93fb4fc
Showing 1 changed file with 111 additions and 90 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,13 @@ package com.leofranc.violao_suite.features.tablaturas

import android.annotation.SuppressLint
import android.util.Log
import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.grid.GridCells
import androidx.compose.foundation.lazy.grid.LazyVerticalGrid
import androidx.compose.foundation.lazy.grid.items
import androidx.compose.foundation.lazy.items
import androidx.compose.material.*
import androidx.compose.material.icons.Icons
Expand All @@ -17,6 +21,7 @@ import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import com.leofranc.violao_suite.data.dao.TablaturaDao
import com.leofranc.violao_suite.data.database.DatabaseProvider
Expand All @@ -25,120 +30,136 @@ import java.util.concurrent.Executors

private val databaseWriteExecutor = Executors.newSingleThreadExecutor()

@OptIn(ExperimentalFoundationApi::class)
@Composable
fun TelaTablaturas() {
val context = LocalContext.current
val tablaturaDao = DatabaseProvider.getDatabase(context).tablaturaDao()
val tablaturas by tablaturaDao.getAllTablaturas().collectAsState(initial = emptyList())
var showDialog by remember { mutableStateOf(false) } // Controla a exibição do diálogo
var showDialog by remember { mutableStateOf(false) }
var tablaturaSelecionada by remember { mutableStateOf<Tablatura?>(null) }

Scaffold(
floatingActionButton = {
// Exibe o FAB apenas quando não há uma tablatura selecionada
if (tablaturaSelecionada == null) {
if (tablaturaSelecionada == null) {
Scaffold(
floatingActionButton = {
FloatingActionButton(
onClick = {
showDialog = true // Abre o diálogo de criação
},
onClick = { showDialog = true },
backgroundColor = MaterialTheme.colors.primary
) {
Icon(Icons.Default.Add, contentDescription = "Adicionar Tablatura")
}
}
},
floatingActionButtonPosition = FabPosition.End
) { paddingValues ->
Column(
modifier = Modifier
.fillMaxSize()
.padding(paddingValues)
.padding(16.dp)
) {
Text("Lista de Tablaturas", style = MaterialTheme.typography.h6)
},
floatingActionButtonPosition = FabPosition.End
) { paddingValues ->
Column(
modifier = Modifier
.fillMaxSize()
.padding(paddingValues)
.padding(16.dp)
) {
Text("Lista de Tablaturas", style = MaterialTheme.typography.h6)

LazyColumn(modifier = Modifier.weight(1f)) {
items(tablaturas) { tablatura ->
Row(
modifier = Modifier
.fillMaxWidth()
.padding(8.dp)
.clickable { tablaturaSelecionada = tablatura },
horizontalArrangement = Arrangement.SpaceBetween
) {
Column(modifier = Modifier.weight(1f)) {
Text(text = tablatura.nome)
Text(text = tablatura.texto)
LazyVerticalGrid(
columns = GridCells.Fixed(3),
contentPadding = PaddingValues(8.dp),
horizontalArrangement = Arrangement.spacedBy(16.dp),
verticalArrangement = Arrangement.spacedBy(16.dp),
modifier = Modifier.fillMaxSize()
) {
items(tablaturas) { tablatura ->
// Define um tamanho fixo para cada item da grade
Box(
modifier = Modifier
.width(100.dp) // Define uma largura fixa para cada item
.height(140.dp) // Define uma altura fixa para cada item
.clickable {
tablaturaSelecionada = tablatura
},
contentAlignment = Alignment.TopCenter
) {
Column(
horizontalAlignment = Alignment.CenterHorizontally,
modifier = Modifier
.fillMaxSize()
.padding(8.dp)
) {
// Limita o nome e conteúdo a uma linha com overflow
Text(
text = if (tablatura.nome.length > 8) tablatura.nome.take(8) + "..." else tablatura.nome,
style = MaterialTheme.typography.body1,
maxLines = 1,
overflow = TextOverflow.Ellipsis
)
Text(
text = if (tablatura.texto.length > 8) tablatura.texto.take(8) + "..." else tablatura.texto,
style = MaterialTheme.typography.body2,
maxLines = 1,
overflow = TextOverflow.Ellipsis
)

// Espaço para empurrar o botão de exclusão para o final
Spacer(modifier = Modifier.weight(1f))

// Botão de exclusão
IconButton(
onClick = {
databaseWriteExecutor.execute {
try {
tablaturaDao.deleteTablatura(tablatura)
Log.d("TelaTablaturas", "Tablatura excluída com sucesso")
} catch (e: Exception) {
Log.e("TelaTablaturas", "Erro ao excluir tablatura: ${e.message}")
}
}
},
modifier = Modifier.size(24.dp) // Define um tamanho fixo para o ícone
) {
Icon(
imageVector = Icons.Default.Delete,
contentDescription = "Excluir Tablatura",
tint = MaterialTheme.colors.error
)
}
}
}
IconButton(onClick = {
// Executa a exclusão da tablatura
}
}

if (showDialog) {
AdicionarTablaturaDialog(
onDismiss = { showDialog = false },
onAdd = { nome, texto ->
databaseWriteExecutor.execute {
try {
tablaturaDao.deleteTablatura(tablatura)
tablaturaDao.insertTablatura(Tablatura(nome = nome, texto = texto))
Log.d("TelaTablaturas", "Tablatura adicionada com sucesso")
} catch (e: Exception) {
Log.e("TablaturaListSection", "Erro ao deletar tablatura: ${e.message}")
Log.e("InsertTablaturaSection", "Erro ao inserir tablatura: ${e.message}")
}
}
}) {
Icon(
imageVector = Icons.Default.Delete,
contentDescription = "Deletar",
tint = MaterialTheme.colors.error
)
showDialog = false
}
}
Divider(modifier = Modifier.padding(vertical = 8.dp))
)
}
}

// Diálogo para adicionar nova tablatura
if (showDialog) {
AdicionarTablaturaDialog(
onDismiss = { showDialog = false },
onAdd = { nome, texto ->
databaseWriteExecutor.execute {
try {
tablaturaDao.insertTablatura(Tablatura(nome = nome, texto = texto))
} catch (e: Exception) {
Log.e("InsertTablaturaSection", "Erro ao inserir tablatura: ${e.message}")
}
}
} else {
TablaturaDetalheScreen(
tablatura = tablaturaSelecionada!!,
onSave = { nome, texto ->
tablaturaSelecionada?.let { tablatura ->
databaseWriteExecutor.execute {
try {
tablaturaDao.updateTablatura(tablatura.copy(nome = nome, texto = texto))
} catch (e: Exception) {
Log.e("TablaturaDetalheScreen", "Erro ao atualizar tablatura: ${e.message}")
}
showDialog = false
}
)
}

// Exibe a tela de detalhes se uma tablatura for selecionada
tablaturaSelecionada?.let { tablatura ->
TablaturaDetalheScreen(
tablatura = tablatura,
onSave = { nome, texto ->
databaseWriteExecutor.execute {
try {
tablaturaDao.updateTablatura(tablatura.copy(nome = nome, texto = texto))
} catch (e: Exception) {
Log.e("TablaturaDetalheScreen", "Erro ao atualizar tablatura: ${e.message}")
}
}
tablaturaSelecionada = null // Volta para a listagem após salvar
},
onCancel = { tablaturaSelecionada = null } // Volta para a listagem ao cancelar
)
}
}
}
}

// Função para inserir uma nova tablatura diretamente
fun adicionarTablatura(tablaturaDao: TablaturaDao) {
val novaTablatura = Tablatura(nome = "Nova Tablatura", texto = "Conteúdo de exemplo") // Define valores fixos para teste
databaseWriteExecutor.execute {
try {
tablaturaDao.insertTablatura(novaTablatura)
Log.d("TelaTablaturas", "Tablatura adicionada com sucesso") // Log de confirmação
} catch (e: Exception) {
Log.e("TelaTablaturas", "Erro ao adicionar tablatura: ${e.message}")
}
tablaturaSelecionada = null
}
},
onCancel = { tablaturaSelecionada = null }
)
}
}

Expand Down

0 comments on commit 93fb4fc

Please sign in to comment.