Advertisement
BigBlow_

Untitled

Sep 4th, 2024
35
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.15 KB | None | 0 0
  1. -- Nom du fichier à afficher
  2. local fileName = "list.txt"
  3. local saveFileName = "list_save.txt"
  4.  
  5. -- Côté où est connecté le moniteur (ajuste-le selon ta configuration)
  6. local monitorSide = "right"
  7.  
  8. -- Vérifie si le moniteur est connecté correctement
  9. if not peripheral.isPresent(monitorSide) then
  10. print("Erreur: Aucun moniteur détecté sur le côté " .. monitorSide)
  11. return
  12. end
  13.  
  14. -- Attache le périphérique moniteur
  15. local mon = peripheral.wrap(monitorSide)
  16. mon.setTextScale(1) -- Ajuste la taille du texte (1 pour agrandir la police)
  17. mon.clear() -- Efface le moniteur
  18.  
  19. -- Fonction pour lire le contenu d'un fichier et restaurer les états cochés
  20. local function readFile(fileName)
  21. local file = fs.open(fileName, "r")
  22. if not file then
  23. print("Erreur: Impossible de lire le fichier " .. fileName)
  24. return nil
  25. end
  26.  
  27. -- Lit le contenu du fichier ligne par ligne
  28. local lines = {}
  29. local titles = {} -- Contient les 4 premières lignes (le titre)
  30. local lineNumber = 0
  31. while true do
  32. local line = file.readLine()
  33. if line == nil then break end
  34. lineNumber = lineNumber + 1
  35. if lineNumber <= 4 then
  36. table.insert(titles, line) -- Ajoute les 4 premières lignes comme titres
  37. else
  38. table.insert(lines, {text = line, checked = false}) -- Ajoute les autres lignes avec des cases "checked"
  39. end
  40. end
  41. file.close()
  42.  
  43. -- Lit les états cochés depuis le fichier de sauvegarde
  44. local checkedStates = {}
  45. if fs.exists(saveFileName) then
  46. local saveFile = fs.open(saveFileName, "r")
  47. local savedData = saveFile.readAll()
  48. saveFile.close()
  49.  
  50. -- Vérifie que savedData n'est pas nil et désérialise les données
  51. if savedData then
  52. checkedStates = textutils.unserialize(savedData) or {}
  53. end
  54. end
  55.  
  56. -- Applique les états cochés aux éléments
  57. for _, item in ipairs(lines) do
  58. if checkedStates[item.text] ~= nil then
  59. item.checked = checkedStates[item.text]
  60. end
  61. end
  62.  
  63. return titles, lines
  64. end
  65.  
  66. -- Fonction pour sauvegarder l'état des éléments cochés
  67. local function saveCheckedState(content)
  68. local checkedStates = {}
  69. for _, item in ipairs(content) do
  70. checkedStates[item.text] = item.checked
  71. end
  72.  
  73. local saveFile = fs.open(saveFileName, "w")
  74. saveFile.write(textutils.serialize(checkedStates))
  75. saveFile.close()
  76. end
  77.  
  78. -- Fonction pour trier les éléments cochés en haut de la liste et par ordre alphabétique
  79. local function sortList(content)
  80. table.sort(content, function(a, b)
  81. if a.checked ~= b.checked then
  82. return a.checked and not b.checked -- Les éléments cochés passent avant les non-cochés
  83. else
  84. return a.text:lower() < b.text:lower() -- Trie par ordre alphabétique (insensible à la casse)
  85. end
  86. end)
  87. end
  88.  
  89. -- Fonction pour afficher le contenu avec des cases à cocher et des couleurs
  90. local function displayList(titles, content)
  91. mon.clear()
  92. mon.setCursorPos(1, 1) -- Positionne le curseur au début
  93.  
  94. -- Affiche les titres sans cases à cocher
  95. for i, title in ipairs(titles) do
  96. mon.setCursorPos(2, i)
  97. mon.setTextColor(colors.yellow) -- Couleur jaune pour les titres
  98. mon.write(title)
  99. end
  100.  
  101. -- Affiche la liste à partir de la 5ème ligne avec des cases à cocher
  102. for i, item in ipairs(content) do
  103. mon.setCursorPos(2, i + #titles)
  104. if item.checked then
  105. mon.setTextColor(colors.green) -- Couleur verte pour les éléments cochés
  106. mon.write("[X] ")
  107. else
  108. mon.setTextColor(colors.white) -- Couleur blanche pour les éléments décochés
  109. mon.write("[ ] ")
  110. end
  111. mon.write(item.text) -- Affiche le texte de la ligne
  112. end
  113. mon.setTextColor(colors.white) -- Réinitialise la couleur du texte
  114. end
  115.  
  116. -- Fonction pour gérer les clics sur le moniteur
  117. local function handleClick(titles, content)
  118. while true do
  119. local event, side, x, y = os.pullEvent("monitor_touch")
  120. if side == monitorSide then
  121. local index = y - #titles -- Calcul l'index en fonction de l'offset des titres
  122. if index > 0 and index <= #content then
  123. local item = content[index]
  124. item.checked = not item.checked -- Inverse l'état de la case
  125. sortList(content) -- Trie la liste pour placer les cochés en haut et par ordre alphabétique
  126. displayList(titles, content) -- Met à jour l'affichage
  127. saveCheckedState(content) -- Sauvegarde l'état actuel
  128. end
  129. end
  130. end
  131. end
  132.  
  133. -- Programme principal
  134. local titles, content = readFile(fileName)
  135. if content then
  136. sortList(content) -- Trie la liste dès le départ
  137. displayList(titles, content) -- Affiche les titres et la liste avec les cases à cocher
  138. handleClick(titles, content) -- Gère les clics pour cocher/décocher les cases
  139. else
  140. print("Erreur: Le fichier est vide ou ne peut pas être lu.")
  141. end
  142.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement