first and final commit

This commit is contained in:
Worshox 2024-06-23 22:36:34 +02:00
commit ac939f84e4
4 changed files with 103 additions and 0 deletions

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
commands.txt
.vscode

9
Dockerfile Normal file
View File

@ -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]

60
README.md Normal file
View File

@ -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=<ADRES_IP>: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=<ADRES_IP>: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 (`<ADRES_IP>`) należy zastąpić rzeczywistym adresem IP Twojego hosta, na którym uruchomiony jest serwer X.

32
todo.pl Normal file
View File

@ -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.