commit ac939f84e478e4cf7fa8a0451c72b16a9ae2b61a Author: Worshox Date: Sun Jun 23 22:36:34 2024 +0200 first and final commit diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..f7c40a4 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +commands.txt +.vscode \ No newline at end of file diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..f228bbe --- /dev/null +++ b/Dockerfile @@ -0,0 +1,9 @@ +FROM swipl:latest + +RUN apt-get update && apt-get install -y swi-prolog-x && apt-get clean + +WORKDIR /app + +COPY . /app + +ENTRYPOINT swipl -g [todo] \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..3cc7374 --- /dev/null +++ b/README.md @@ -0,0 +1,60 @@ +# Aplikacja TODO w Prologu + +## Opis + +Jest to prosty program TODO napisany w języku Prolog, który umożliwia dodawanie i usuwanie zadań do zrobienia. + +## Wymagania + +Do uruchomienia programu w kontenerze Docker potrzebne są: + +- Docker +- X11 (X Window System) + +### Linux + +Na systemie Linux X11 zazwyczaj jest już dostępny. + +### Windows + +Na systemie Windows konieczna jest instalacja programu obsługującego X11, np. Xming. Należy upewnić się, że w Xming jest wyłączone Access Control, aby umożliwić uruchamianie okien aplikacji z kontenera. + +## Instalacja + +1. Sklonuj to repozytorium do lokalnego środowiska: + +``` +git clone https://git.wmi.amu.edu.pl/s490042/prolog_todo.git +cd todo-prolog +``` + +2. Znajdź swój lokalny adres IP, który będzie potrzebny do konfiguracji X11. + +3. Zbuduj obraz Docker za pomocą polecenia: + +``` +docker build -t todo_prolog . +``` + +## Uruchomienie + +### Windows + +Uruchom kontener Docker, ustawiając zmienną środowiskową `DISPLAY` na swój adres IP: + +``` +docker run -it --rm -e DISPLAY=:0.0 todo_prolog +``` + +### Linux + +Uruchom kontener Docker, ustawiając zmienną środowiskową `DISPLAY` oraz montując odpowiednio gniazdo X11: + +``` +docker run -it --rm -e DISPLAY=:0.0 -v /tmp/.X11-unix:/tmp/.X11-unix todo_prolog +``` + +## Uwagi dodatkowe + +- Upewnij się, że Xming na Windowsie lub odpowiedni serwer X na Linuxie jest uruchomiony przed uruchomieniem kontenera Docker. +- Adres IP (``) należy zastąpić rzeczywistym adresem IP Twojego hosta, na którym uruchomiony jest serwer X. diff --git a/todo.pl b/todo.pl new file mode 100644 index 0000000..0b36dec --- /dev/null +++ b/todo.pl @@ -0,0 +1,32 @@ +:- use_module(library(pce)). + +create_todo :- + new(Window, dialog('Prolog TODO')), + new(TaskName, text_item('Nazwa zadania')), + new(TaskList, list_browser), + new(AddButton, button('Dodaj zadanie', message(@prolog, add_task, TaskName, TaskList))), + new(RemoveButton, button('Usuń zadanie', message(@prolog, remove_task, TaskList))), + send(Window, append, TaskName), + send(Window, append, AddButton), + send(Window, append, TaskList, below), + send(Window, append, RemoveButton), + send(Window, open). + +add_task(TaskName, TaskList) :- + get(TaskName, selection, SelectedName), + send(TaskList, append, SelectedName), + send(@display, inform, string('Dodano zadanie: "%s".', SelectedName)), + open('todo_list.txt', append, Stream), + format(Stream, '~w~n', [SelectedName]), + close(Stream). + +remove_task(TaskList) :- + get(TaskList, selection, DictItem), + ( DictItem \== @nil + -> get(DictItem, key, TaskName), + send(TaskList, delete, DictItem), + send(@display, inform, string('Usunięto zadanie: "%s".', TaskName)) + ; send(@display, inform, 'Nie wybrano zadania.') + ). + +:- create_todo. \ No newline at end of file