Advertisement
BigBlow_

Untitled

Sep 4th, 2024
17
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.99 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. while true do
  30. local line = file.readLine()
  31. if line == nil then break end
  32. table.insert(lines, {text = line, checked = false}) -- Ajoute chaque ligne avec une case "checked"
  33. end
  34. file.close()
  35.  
  36. -- Lit les états cochés depuis le fichier de sauvegarde
  37. if fs.exists(saveFileName) then
  38. local saveFile = fs.open(saveFileName, "r")
  39. local lineNum = 1
  40. while true do
  41. local state = saveFile.readLine()
  42. if state == nil then break end
  43. if lines[lineNum] then
  44. lines[lineNum].checked = (state == "true")
  45. end
  46. lineNum = lineNum + 1
  47. end
  48. saveFile.close()
  49. end
  50.  
  51. return lines
  52. end
  53.  
  54. -- Fonction pour sauvegarder l'état des éléments cochés
  55. local function saveCheckedState(content)
  56. local saveFile = fs.open(saveFileName, "w")
  57. for _, item in ipairs(content) do
  58. saveFile.writeLine(tostring(item.checked))
  59. end
  60. saveFile.close()
  61. end
  62.  
  63. -- Fonction pour trier les éléments cochés en haut de la liste
  64. local function sortList(content)
  65. table.sort(content, function(a, b)
  66. return a.checked and not b.checked -- Les éléments cochés (a) passent avant les non cochés (b)
  67. end)
  68. end
  69.  
  70. -- Fonction pour afficher le contenu avec des cases à cocher et des couleurs
  71. local function displayList(content)
  72. mon.clear()
  73. mon.setCursorPos(1, 1) -- Positionne le curseur au début
  74. for i, item in ipairs(content) do
  75. mon.setCursorPos(2, i)
  76. if item.checked then
  77. mon.setTextColor(colors.green) -- Couleur verte pour les éléments cochés
  78. mon.write("[X] ")
  79. else
  80. mon.setTextColor(colors.white) -- Couleur blanche pour les éléments décochés
  81. mon.write("[ ] ")
  82. end
  83. mon.write(item.text) -- Affiche le texte de la ligne
  84. end
  85. mon.setTextColor(colors.white) -- Réinitialise la couleur du texte
  86. end
  87.  
  88. -- Fonction pour gérer les clics sur le moniteur
  89. local function handleClick(content)
  90. while true do
  91. local event, side, x, y = os.pullEvent("monitor_touch")
  92. if side == monitorSide then
  93. for i, item in ipairs(content) do
  94. if y == i then -- Vérifie si le clic est sur la ligne
  95. item.checked = not item.checked -- Inverse l'état de la case
  96. sortList(content) -- Trie la liste pour placer les cochés en haut
  97. displayList(content) -- Met à jour l'affichage
  98. saveCheckedState(content) -- Sauvegarde l'état actuel
  99. break
  100. end
  101. end
  102. end
  103. end
  104. end
  105.  
  106. -- Programme principal
  107. local content = readFile(fileName)
  108. if content then
  109. sortList(content) -- Trie la liste dès le départ
  110. displayList(content) -- Affiche la liste avec les cases à cocher
  111. handleClick(content) -- Gère les clics pour cocher/décocher les cases
  112. else
  113. print("Erreur: Le fichier est vide ou ne peut pas être lu.")
  114. end
  115.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement