Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- -- Nom du fichier à afficher
- local fileName = "list.txt"
- local saveFileName = "list_save.txt"
- -- Côté où est connecté le moniteur (ajuste-le selon ta configuration)
- local monitorSide = "right"
- -- Vérifie si le moniteur est connecté correctement
- if not peripheral.isPresent(monitorSide) then
- print("Erreur: Aucun moniteur détecté sur le côté " .. monitorSide)
- return
- end
- -- Attache le périphérique moniteur
- local mon = peripheral.wrap(monitorSide)
- mon.setTextScale(1) -- Ajuste la taille du texte (1 pour agrandir la police)
- mon.clear() -- Efface le moniteur
- -- Fonction pour lire le contenu d'un fichier et restaurer les états cochés
- local function readFile(fileName)
- local file = fs.open(fileName, "r")
- if not file then
- print("Erreur: Impossible de lire le fichier " .. fileName)
- return nil
- end
- -- Lit le contenu du fichier ligne par ligne
- local lines = {}
- local titles = {} -- Contient les 4 premières lignes (le titre)
- local lineNumber = 0
- while true do
- local line = file.readLine()
- if line == nil then break end
- lineNumber = lineNumber + 1
- if lineNumber <= 4 then
- table.insert(titles, line) -- Ajoute les 4 premières lignes comme titres
- else
- table.insert(lines, {text = line, checked = false}) -- Ajoute les autres lignes avec des cases "checked"
- end
- end
- file.close()
- -- Lit les états cochés depuis le fichier de sauvegarde
- local checkedStates = {}
- if fs.exists(saveFileName) then
- local saveFile = fs.open(saveFileName, "r")
- local savedData = saveFile.readAll()
- saveFile.close()
- -- Vérifie que savedData n'est pas nil et désérialise les données
- if savedData then
- checkedStates = textutils.unserialize(savedData) or {}
- end
- end
- -- Applique les états cochés aux éléments
- for _, item in ipairs(lines) do
- if checkedStates[item.text] ~= nil then
- item.checked = checkedStates[item.text]
- end
- end
- return titles, lines
- end
- -- Fonction pour sauvegarder l'état des éléments cochés
- local function saveCheckedState(content)
- local checkedStates = {}
- for _, item in ipairs(content) do
- checkedStates[item.text] = item.checked
- end
- local saveFile = fs.open(saveFileName, "w")
- saveFile.write(textutils.serialize(checkedStates))
- saveFile.close()
- end
- -- Fonction pour trier les éléments cochés en haut de la liste et par ordre alphabétique
- local function sortList(content)
- table.sort(content, function(a, b)
- if a.checked ~= b.checked then
- return a.checked and not b.checked -- Les éléments cochés passent avant les non-cochés
- else
- return a.text:lower() < b.text:lower() -- Trie par ordre alphabétique (insensible à la casse)
- end
- end)
- end
- -- Fonction pour afficher le contenu avec des cases à cocher et des couleurs
- local function displayList(titles, content)
- mon.clear()
- mon.setCursorPos(1, 1) -- Positionne le curseur au début
- -- Affiche les titres sans cases à cocher
- for i, title in ipairs(titles) do
- mon.setCursorPos(2, i)
- mon.setTextColor(colors.yellow) -- Couleur jaune pour les titres
- mon.write(title)
- end
- -- Affiche la liste à partir de la 5ème ligne avec des cases à cocher
- for i, item in ipairs(content) do
- mon.setCursorPos(2, i + #titles)
- if item.checked then
- mon.setTextColor(colors.green) -- Couleur verte pour les éléments cochés
- mon.write("[X] ")
- else
- mon.setTextColor(colors.white) -- Couleur blanche pour les éléments décochés
- mon.write("[ ] ")
- end
- mon.write(item.text) -- Affiche le texte de la ligne
- end
- mon.setTextColor(colors.white) -- Réinitialise la couleur du texte
- end
- -- Fonction pour gérer les clics sur le moniteur
- local function handleClick(titles, content)
- while true do
- local event, side, x, y = os.pullEvent("monitor_touch")
- if side == monitorSide then
- local index = y - #titles -- Calcul l'index en fonction de l'offset des titres
- if index > 0 and index <= #content then
- local item = content[index]
- item.checked = not item.checked -- Inverse l'état de la case
- sortList(content) -- Trie la liste pour placer les cochés en haut et par ordre alphabétique
- displayList(titles, content) -- Met à jour l'affichage
- saveCheckedState(content) -- Sauvegarde l'état actuel
- end
- end
- end
- end
- -- Programme principal
- local titles, content = readFile(fileName)
- if content then
- sortList(content) -- Trie la liste dès le départ
- displayList(titles, content) -- Affiche les titres et la liste avec les cases à cocher
- handleClick(titles, content) -- Gère les clics pour cocher/décocher les cases
- else
- print("Erreur: Le fichier est vide ou ne peut pas être lu.")
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement