Change view detail
parent
f611891c09
commit
b54f734bd7
|
@ -6,11 +6,11 @@ import androidx.compose.foundation.layout.*
|
||||||
import androidx.compose.foundation.lazy.LazyColumn
|
import androidx.compose.foundation.lazy.LazyColumn
|
||||||
import androidx.compose.foundation.lazy.items
|
import androidx.compose.foundation.lazy.items
|
||||||
import androidx.compose.foundation.lazy.rememberLazyListState
|
import androidx.compose.foundation.lazy.rememberLazyListState
|
||||||
import androidx.compose.material.MaterialTheme
|
import androidx.compose.material.*
|
||||||
import androidx.compose.material.Text
|
|
||||||
import androidx.compose.material.icons.Icons
|
import androidx.compose.material.icons.Icons
|
||||||
import androidx.compose.material.icons.filled.*
|
import androidx.compose.material.icons.filled.ArrowBack
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.runtime.mutableStateOf
|
||||||
import androidx.compose.ui.Alignment
|
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
|
||||||
|
@ -18,11 +18,14 @@ import androidx.compose.ui.text.font.FontWeight
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import main.component.buttonComponent
|
import main.component.buttonComponent
|
||||||
|
|
||||||
|
@OptIn(ExperimentalMaterialApi::class)
|
||||||
@Composable
|
@Composable
|
||||||
fun glossaryDetailedPage(
|
fun glossaryDetailedPage(
|
||||||
glossary: List<Word>,
|
glossary: List<Word>,
|
||||||
onBackClick: () -> Unit,
|
onBackClick: () -> Unit,
|
||||||
onAddWordClick: () -> Unit
|
onAddWordClick: () -> Unit,
|
||||||
|
onExportClick: () -> Unit,
|
||||||
|
onImportClick: () -> Unit
|
||||||
) {
|
) {
|
||||||
Column(
|
Column(
|
||||||
modifier = Modifier.fillMaxSize(),
|
modifier = Modifier.fillMaxSize(),
|
||||||
|
@ -37,11 +40,82 @@ fun glossaryDetailedPage(
|
||||||
|
|
||||||
Spacer(modifier = Modifier.height(16.dp))
|
Spacer(modifier = Modifier.height(16.dp))
|
||||||
|
|
||||||
buttonComponent(text = "Retour", onClick = { onBackClick() }, icon = Icons.Filled.ArrowBack, width = 150)
|
Row {
|
||||||
buttonComponent(text = "Ajouter un mot", onClick = { onAddWordClick() }, icon = Icons.Filled.Add, width = 150)
|
buttonComponent(text = "Retour", onClick = { onBackClick() }, icon = Icons.Filled.ArrowBack, width = 150, modifier = Modifier.padding(10.dp))
|
||||||
|
buttonComponent(text = "Ajouter un mot", onClick = { onAddWordClick() }, width = 150, modifier = Modifier.padding(10.dp))
|
||||||
|
buttonComponent(text = "Exporter un fichier", onClick = { onExportClick() }, width = 150, modifier = Modifier.padding(10.dp))
|
||||||
|
if (exportedSuccessfully.value) {
|
||||||
|
AlertDialog(
|
||||||
|
onDismissRequest = { exportedSuccessfully.value = false },
|
||||||
|
title = { Text("Exportation réussie") },
|
||||||
|
text = { Text("Le fichier a été exporté avec succès") },
|
||||||
|
confirmButton = {
|
||||||
|
Button(
|
||||||
|
onClick = { exportedSuccessfully.value = false },
|
||||||
|
colors = ButtonDefaults.buttonColors(
|
||||||
|
backgroundColor = customRedColor,
|
||||||
|
contentColor = Color.White
|
||||||
|
)
|
||||||
|
) {
|
||||||
|
Text("OK")
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
buttonComponent(text = "Importer un fichier", onClick = { onImportClick() }, width = 150, modifier = Modifier.padding(10.dp))
|
||||||
|
if (importedSuccessfully.value) {
|
||||||
|
AlertDialog(
|
||||||
|
onDismissRequest = { importedSuccessfully.value = false },
|
||||||
|
title = { Text("Importation réussie") },
|
||||||
|
text = { Text("Le fichier a été importé avec succès") },
|
||||||
|
confirmButton = {
|
||||||
|
Button(
|
||||||
|
onClick = {
|
||||||
|
importedSuccessfully.value = false
|
||||||
|
frame.dispose()
|
||||||
|
},
|
||||||
|
colors = ButtonDefaults.buttonColors(
|
||||||
|
backgroundColor = customRedColor,
|
||||||
|
contentColor = Color.White
|
||||||
|
)
|
||||||
|
) {
|
||||||
|
Text("OK")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (errorImportation.value) {
|
||||||
|
AlertDialog(
|
||||||
|
onDismissRequest = { errorImportation.value = false },
|
||||||
|
title = { Text("Importation Echouée") },
|
||||||
|
text = { Text("Le fichier n'a pas pu être importé") },
|
||||||
|
confirmButton = {
|
||||||
|
Button(
|
||||||
|
onClick = {
|
||||||
|
errorImportation.value = false
|
||||||
|
frame.dispose()
|
||||||
|
},
|
||||||
|
colors = ButtonDefaults.buttonColors(
|
||||||
|
backgroundColor = customRedColor,
|
||||||
|
contentColor = Color.White
|
||||||
|
)
|
||||||
|
) {
|
||||||
|
Text("OK")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var importedSuccessfully = mutableStateOf(false)
|
||||||
|
var errorImportation = mutableStateOf(false)
|
||||||
|
var exportedSuccessfully = mutableStateOf(false)
|
||||||
|
|
||||||
// Faire un tableau qui affiche les mots et leur définition
|
// Faire un tableau qui affiche les mots et leur définition
|
||||||
@Composable
|
@Composable
|
||||||
fun glossaryTable(glossary: List<Word>) {
|
fun glossaryTable(glossary: List<Word>) {
|
||||||
|
|
|
@ -1,12 +1,5 @@
|
||||||
package main
|
package main
|
||||||
|
|
||||||
import androidx.compose.foundation.layout.*
|
|
||||||
import androidx.compose.material.*
|
|
||||||
import androidx.compose.runtime.*
|
|
||||||
import androidx.compose.ui.Alignment
|
|
||||||
import androidx.compose.ui.Modifier
|
|
||||||
import androidx.compose.ui.graphics.Color
|
|
||||||
import androidx.compose.ui.unit.dp
|
|
||||||
import org.apache.poi.ss.usermodel.CellType
|
import org.apache.poi.ss.usermodel.CellType
|
||||||
import org.apache.poi.ss.usermodel.Workbook
|
import org.apache.poi.ss.usermodel.Workbook
|
||||||
import org.apache.poi.xssf.usermodel.XSSFWorkbook
|
import org.apache.poi.xssf.usermodel.XSSFWorkbook
|
||||||
|
@ -21,170 +14,7 @@ import java.io.File
|
||||||
data class Glossary(val name: String, val jsonFilePath: String)
|
data class Glossary(val name: String, val jsonFilePath: String)
|
||||||
|
|
||||||
val frame = Frame()
|
val frame = Frame()
|
||||||
@OptIn(ExperimentalMaterialApi::class)
|
|
||||||
@Composable
|
|
||||||
fun glossaryPage(
|
|
||||||
languageManager: LanguageManager,
|
|
||||||
onAddWordClick: () -> Unit,
|
|
||||||
onImportClick: () -> Unit,
|
|
||||||
onExportClick: () -> Unit,
|
|
||||||
onSeeGlossaryClick: () -> Unit,
|
|
||||||
glossary: Glossary,
|
|
||||||
onBackClick: () -> Unit,
|
|
||||||
) {
|
|
||||||
|
|
||||||
|
|
||||||
Column(
|
|
||||||
modifier = Modifier.fillMaxSize(),
|
|
||||||
verticalArrangement = Arrangement.Top, // Align content at the top
|
|
||||||
horizontalAlignment = Alignment.CenterHorizontally
|
|
||||||
) {
|
|
||||||
Text(text = languageManager.getGlossaryTitle() + ": " + glossary.name, style = MaterialTheme.typography.h3)
|
|
||||||
}
|
|
||||||
|
|
||||||
Column(
|
|
||||||
modifier = Modifier
|
|
||||||
.fillMaxSize() // Fills the maximum available width
|
|
||||||
.padding(16.dp),
|
|
||||||
verticalArrangement = Arrangement.Center,
|
|
||||||
horizontalAlignment = Alignment.CenterHorizontally
|
|
||||||
|
|
||||||
) {
|
|
||||||
|
|
||||||
Button(
|
|
||||||
onClick = onAddWordClick,
|
|
||||||
modifier = Modifier
|
|
||||||
.width(300.dp),
|
|
||||||
colors = ButtonDefaults.buttonColors(
|
|
||||||
backgroundColor = customRedColor,
|
|
||||||
contentColor = Color.White
|
|
||||||
)
|
|
||||||
) {
|
|
||||||
Text(languageManager.getAddWordText())
|
|
||||||
}
|
|
||||||
|
|
||||||
Button(
|
|
||||||
onClick = onImportClick,
|
|
||||||
modifier = Modifier
|
|
||||||
.width(300.dp),
|
|
||||||
colors = ButtonDefaults.buttonColors(
|
|
||||||
backgroundColor = customRedColor,
|
|
||||||
contentColor = Color.White
|
|
||||||
)
|
|
||||||
) {
|
|
||||||
Text(languageManager.getImportText())
|
|
||||||
}
|
|
||||||
|
|
||||||
if (importedSuccessfully.value) {
|
|
||||||
AlertDialog(
|
|
||||||
onDismissRequest = { importedSuccessfully.value = false },
|
|
||||||
title = { Text("Importation réussie") },
|
|
||||||
text = { Text("Le fichier a été importé avec succès") },
|
|
||||||
confirmButton = {
|
|
||||||
Button(
|
|
||||||
onClick = {
|
|
||||||
importedSuccessfully.value = false
|
|
||||||
frame.dispose()
|
|
||||||
},
|
|
||||||
colors = ButtonDefaults.buttonColors(
|
|
||||||
backgroundColor = customRedColor,
|
|
||||||
contentColor = Color.White
|
|
||||||
)
|
|
||||||
) {
|
|
||||||
Text("OK")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
)
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
if (errorImportation.value) {
|
|
||||||
AlertDialog(
|
|
||||||
onDismissRequest = { errorImportation.value = false },
|
|
||||||
title = { Text("Importation Echouée") },
|
|
||||||
text = { Text("Le fichier n'a pas pu être importé") },
|
|
||||||
confirmButton = {
|
|
||||||
Button(
|
|
||||||
onClick = {
|
|
||||||
errorImportation.value = false
|
|
||||||
frame.dispose()
|
|
||||||
},
|
|
||||||
colors = ButtonDefaults.buttonColors(
|
|
||||||
backgroundColor = customRedColor,
|
|
||||||
contentColor = Color.White
|
|
||||||
)
|
|
||||||
) {
|
|
||||||
Text("OK")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
Button(
|
|
||||||
onClick = onExportClick,
|
|
||||||
modifier = Modifier
|
|
||||||
.width(300.dp),
|
|
||||||
colors = ButtonDefaults.buttonColors(
|
|
||||||
backgroundColor = customRedColor,
|
|
||||||
contentColor = Color.White
|
|
||||||
)
|
|
||||||
) {
|
|
||||||
Text(languageManager.getExportText())
|
|
||||||
}
|
|
||||||
|
|
||||||
if (exportedSuccessfully.value) {
|
|
||||||
AlertDialog(
|
|
||||||
onDismissRequest = { exportedSuccessfully.value = false },
|
|
||||||
title = { Text("Exportation réussie") },
|
|
||||||
text = { Text("Le fichier a été exporté avec succès") },
|
|
||||||
confirmButton = {
|
|
||||||
Button(
|
|
||||||
onClick = { exportedSuccessfully.value = false },
|
|
||||||
colors = ButtonDefaults.buttonColors(
|
|
||||||
backgroundColor = customRedColor,
|
|
||||||
contentColor = Color.White
|
|
||||||
)
|
|
||||||
) {
|
|
||||||
Text("OK")
|
|
||||||
}
|
|
||||||
}
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
Button(
|
|
||||||
onClick = onSeeGlossaryClick,
|
|
||||||
modifier = Modifier
|
|
||||||
.width(300.dp),
|
|
||||||
colors = ButtonDefaults.buttonColors(
|
|
||||||
backgroundColor = customRedColor,
|
|
||||||
contentColor = Color.White
|
|
||||||
)
|
|
||||||
) {
|
|
||||||
Text(languageManager.getSeeGlossaryText())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Column(
|
|
||||||
modifier = Modifier.fillMaxSize().padding(20.dp),
|
|
||||||
verticalArrangement = Arrangement.Bottom,
|
|
||||||
horizontalAlignment = Alignment.CenterHorizontally
|
|
||||||
) {
|
|
||||||
Button(
|
|
||||||
onClick = onBackClick,
|
|
||||||
colors = ButtonDefaults.buttonColors(
|
|
||||||
backgroundColor = customRedColor,
|
|
||||||
contentColor = Color.White
|
|
||||||
)
|
|
||||||
) {
|
|
||||||
Text(languageManager.getBackButtonText())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
var importedSuccessfully = mutableStateOf(false)
|
|
||||||
var errorImportation = mutableStateOf(false)
|
|
||||||
var exportedSuccessfully = mutableStateOf(false)
|
|
||||||
fun selectFile(extensions: Set<String>, onFileSelected: (String) -> Unit) {
|
fun selectFile(extensions: Set<String>, onFileSelected: (String) -> Unit) {
|
||||||
|
|
||||||
val fileDialog = FileDialog(frame, "Select a file", FileDialog.LOAD)
|
val fileDialog = FileDialog(frame, "Select a file", FileDialog.LOAD)
|
||||||
|
|
|
@ -102,7 +102,7 @@ fun app() {
|
||||||
Button(
|
Button(
|
||||||
onClick = {
|
onClick = {
|
||||||
selectedGlossary = glossary
|
selectedGlossary = glossary
|
||||||
currentPage.value = "glossaireOptions"
|
currentPage.value = "glossaireDetail"
|
||||||
},
|
},
|
||||||
modifier = Modifier
|
modifier = Modifier
|
||||||
.width(150.dp),
|
.width(150.dp),
|
||||||
|
@ -296,16 +296,11 @@ fun app() {
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
"glossaireOptions" -> {
|
"glossaireDetail" -> {
|
||||||
glossaryPage(
|
glossaryDetailedPage(
|
||||||
languageManager,
|
glossary = glossaryDetail,
|
||||||
|
onBackClick = { currentPage.value = "glossaires" },
|
||||||
onAddWordClick = { currentPage.value = "formulaire" },
|
onAddWordClick = { currentPage.value = "formulaire" },
|
||||||
onImportClick = {
|
|
||||||
selectFile(setOf("csv", "xlsx")) { filePath ->
|
|
||||||
println("Importing file: $filePath")
|
|
||||||
selectedGlossary?.let { importFile(it, filePath) }
|
|
||||||
}
|
|
||||||
},
|
|
||||||
onExportClick = {
|
onExportClick = {
|
||||||
val fileDialog = FileDialog(Frame(), "Save as CSV", FileDialog.SAVE)
|
val fileDialog = FileDialog(Frame(), "Save as CSV", FileDialog.SAVE)
|
||||||
fileDialog.file = selectedGlossary?.name // Initial file name
|
fileDialog.file = selectedGlossary?.name // Initial file name
|
||||||
|
@ -320,23 +315,17 @@ fun app() {
|
||||||
println("Export command cancelled by user.")
|
println("Export command cancelled by user.")
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
onSeeGlossaryClick = {
|
onImportClick = {
|
||||||
glossaryDetail = selectedGlossary?.let { loadDatasFromFile(it.jsonFilePath) }!!
|
selectFile(setOf("csv", "xlsx")) { filePath ->
|
||||||
currentPage.value = "glossaireDetail"
|
println("Importing file: $filePath")
|
||||||
},
|
selectedGlossary?.let { importFile(it, filePath) }
|
||||||
glossary = selectedGlossary!!,
|
}
|
||||||
) { currentPage.value = "glossaires" }
|
|
||||||
}
|
}
|
||||||
"glossaireDetail" -> {
|
|
||||||
glossaryDetailedPage(
|
|
||||||
glossary = glossaryDetail,
|
|
||||||
onBackClick = { currentPage.value = "glossaireOptions" },
|
|
||||||
onAddWordClick = { currentPage.value = "formulaire" },
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
"formulaire" -> {
|
"formulaire" -> {
|
||||||
selectedGlossary?.let { formPage(it, onCancelClick = { currentPage.value = "glossaireOptions" }) }
|
selectedGlossary?.let { formPage(it, onCancelClick = { currentPage.value = "glossaireDetail" }) }
|
||||||
}
|
}
|
||||||
|
|
||||||
"choixLangage" -> {
|
"choixLangage" -> {
|
||||||
|
|
Loading…
Reference in New Issue