1
0
Fork 0

- changed filename;

- updated italian translation.
This commit is contained in:
cage 2023-07-27 16:30:52 +02:00
parent 53ad411514
commit d2ac33b64b
4 changed files with 210 additions and 88 deletions

View File

@ -54,7 +54,7 @@ src/gui/client/os-utils.lisp
src/gui/client/program-events.lisp
src/gui/client/scheduler.lisp
src/gui/client/search-frame.lisp
src/gui/client/stream-window.lisp
src/gui/client/stream-frame.lisp
src/gui/client/titan-window.lisp
src/gui/client/tour-window.lisp
src/gui/client/validation.lisp

View File

@ -8,8 +8,8 @@ msgid ""
msgstr ""
"Project-Id-Version: tinmop 0.0.1\n"
"Report-Msgid-Bugs-To: https://codeberg.org/cage/tinmop/\n"
"POT-Creation-Date: 2023-07-22 16:51+0200\n"
"PO-Revision-Date: 2023-07-22 16:54+0200\n"
"POT-Creation-Date: 2023-07-27 16:28+0200\n"
"PO-Revision-Date: 2023-07-27 16:29+0200\n"
"Last-Translator: cage <cage-dev@twistfold.it>\n"
"Language-Team: Italian <https://translate.codeberg.org/projects/tinmop/"
"tinmop/it/>\n"
@ -84,7 +84,7 @@ msgstr ""
"Errore: non sono stato in grado di creare il socket per la cattura del "
"codice di autorizzazione"
#: src/api-client.lisp:895
#: src/api-client.lisp:901
#, lisp-format
msgid "Initializing empty credentials file in ~a"
msgstr "Inizializzo credenziali vuote (segnaposto) nel file ~a"
@ -199,7 +199,7 @@ msgstr "Opzioni diponibili"
msgid "Error: command ~a not found"
msgstr "Errore: comando ~a non trovato"
#: src/conditions.lisp:77 src/conditions.lisp:81 src/db.lisp:2935
#: src/conditions.lisp:77 src/conditions.lisp:81 src/db.lisp:2936
#: src/message-rendering-utils.lisp:155 src/message-rendering-utils.lisp:189
#: src/message-rendering-utils.lisp:194
msgid "unknown"
@ -225,7 +225,7 @@ msgstr "diretta"
msgid "home"
msgstr "home"
#: src/db.lisp:3254
#: src/db.lisp:3255
msgid "no description"
msgstr "nessuna descrizione"
@ -323,7 +323,7 @@ msgid "Redirects to ~s, follows redirect? [y/N] "
msgstr "Seguire la redirezione a ~s? [s/N] "
#: src/gemini-viewer.lisp:807 src/gui/server/public-api-gemini-stream.lisp:275
#: src/tui-utils.lisp:509 src/tui-utils.lisp:520 src/ui-goodies.lisp:2980
#: src/tui-utils.lisp:510 src/tui-utils.lisp:521 src/ui-goodies.lisp:2980
#, lisp-format
msgid "Error: ~a"
msgstr "Errore: ~a"
@ -364,21 +364,21 @@ msgstr "Il certificato dell'host ~a è cambiato dall'ultima visita"
msgid "Connection prematurely closed from the server: ~a"
msgstr "Connessione interrotta prematuramente da parte del server: ~a"
#: src/gempub.lisp:104
#: src/gempub.lisp:105
msgid "Syncing gempub library"
msgstr "Sincronizzo la biblioteca dei file gempub"
#: src/gempub.lisp:123
#: src/gempub.lisp:124
#, lisp-format
msgid "Removed gempub ~s from library, missing file"
msgstr "Rimosso il gempub ~s dalla biblioteca, file non presente"
#: src/gempub.lisp:125
#: src/gempub.lisp:126
#, lisp-format
msgid "Added gempub ~s into the library"
msgstr "Aggiunto il gempub ~s alla biblioteca"
#: src/gempub.lisp:308
#: src/gempub.lisp:309
msgid "Gempub library"
msgstr "Biblioteca dei gempub"
@ -412,13 +412,12 @@ msgid "~s is not a valid gemini address"
msgstr "~s non è un indirizzo gemini valido"
#: src/gui/client/bookmark-window.lisp:28 src/gui/client/main-window.lisp:215
#: src/gui/client/stream-window.lisp:73
msgid "Streams"
msgstr "Flussi"
#: src/gui/client/bookmark-window.lisp:34
#: src/gui/client/certificates-window.lisp:39
#: src/gui/client/gemlog-window.lisp:71 src/gui/client/stream-window.lisp:43
#: src/gui/client/gemlog-window.lisp:71 src/gui/client/stream-frame.lisp:58
#: src/gui/client/tour-window.lisp:41
msgid "Address"
msgstr "Indirizzo"
@ -624,16 +623,16 @@ msgstr "Rimescola"
msgid "file ~a not found"
msgstr "file ~a non trovato"
#: src/gui/client/main-window.lisp:383 src/gui/client/main-window.lisp:993
#: src/gui/client/main-window.lisp:383 src/gui/client/main-window.lisp:996
msgid "Server certificate error"
msgstr "Errore sul certificato del server"
#: src/gui/client/main-window.lisp:399 src/gui/client/main-window.lisp:1014
#: src/gui/client/main-window.lisp:399 src/gui/client/main-window.lisp:1017
#, lisp-format
msgid "Follow redirection to ~a?"
msgstr "Seguire la redirezione a ~a?"
#: src/gui/client/main-window.lisp:400 src/gui/client/main-window.lisp:1015
#: src/gui/client/main-window.lisp:400 src/gui/client/main-window.lisp:1018
msgid "Redirection"
msgstr "Redirezione"
@ -694,20 +693,20 @@ msgstr "Apri collegamento in backgroud"
msgid "No such file or directory: ~a"
msgstr "Non esiste il file o la directory ~a"
#: src/gui/client/main-window.lisp:896
#: src/gui/client/main-window.lisp:899
#, lisp-format
msgid "The server asks:~2%~a"
msgstr "Il server chiede:~2%~a"
#: src/gui/client/main-window.lisp:898
#: src/gui/client/main-window.lisp:901
msgid "Submit"
msgstr "Inoltra"
#: src/gui/client/main-window.lisp:899
#: src/gui/client/main-window.lisp:902
msgid "Input query"
msgstr "Input"
#: src/gui/client/main-window.lisp:992
#: src/gui/client/main-window.lisp:995
msgid ""
"The certificate for this address has changed, replace the old with the one I "
"just received?"
@ -715,39 +714,39 @@ msgstr ""
"Il certificato relativo a questo indirizzo è cambiato dall'ultima visita, lo "
"rimpiazzo con quello appena ottenuto?"
#: src/gui/client/main-window.lisp:1174
#: src/gui/client/main-window.lisp:1177
msgid "Tour is terminated"
msgstr "Il tour è terminato"
#: src/gui/client/main-window.lisp:1237
#: src/gui/client/main-window.lisp:1240
msgid "go back"
msgstr "indietro"
#: src/gui/client/main-window.lisp:1238
#: src/gui/client/main-window.lisp:1241
msgid "reload address"
msgstr "ricarica l'indirizzo"
#: src/gui/client/main-window.lisp:1239
#: src/gui/client/main-window.lisp:1242
msgid "go to address"
msgstr "vai all'indirizzo"
#: src/gui/client/main-window.lisp:1240
#: src/gui/client/main-window.lisp:1243
msgid "one level up"
msgstr "un livello in alto"
#: src/gui/client/main-window.lisp:1241
#: src/gui/client/main-window.lisp:1244
msgid "add or remove bookmark"
msgstr "Aggiungi o rimuovi segnalibro"
#: src/gui/client/main-window.lisp:1242
#: src/gui/client/main-window.lisp:1245
msgid "go to the next link in tour"
msgstr "vai al prossimo indirizzo del tour"
#: src/gui/client/main-window.lisp:1243
#: src/gui/client/main-window.lisp:1246
msgid "subscribe/unsubscribe to this gemlog"
msgstr "Abbonati/disdici l'abbonamento a questo gemlog"
#: src/gui/client/main-window.lisp:1244
#: src/gui/client/main-window.lisp:1247
msgid "inline images"
msgstr "includi nella pagina le immagini"
@ -761,19 +760,19 @@ msgstr ""
"Nessun programma è stato definito nel file di configurazione per modificare "
"questo tipo di file"
#: src/gui/client/scheduler.lisp:50
#: src/gui/client/scheduler.lisp:62
msgid "Gemlogs subscriptions updating in progress…"
msgstr "Aggiornamento dei gemlog in corso…"
#: src/gui/client/scheduler.lisp:52
#: src/gui/client/scheduler.lisp:64
msgid "Gemlogs subscriptions updated"
msgstr "Gemlog aggiornati"
#: src/gui/client/scheduler.lisp:56
#: src/gui/client/scheduler.lisp:68
msgid "Old gemlog posts deleted"
msgstr "Cancellati gli articoli più vecchi dei gemlog"
#: src/gui/client/scheduler.lisp:60
#: src/gui/client/scheduler.lisp:72
msgid "Old history entries removed"
msgstr "Eliminati gli elementi della cronologia più vecchi"
@ -797,22 +796,26 @@ msgstr "rendi visibile la precedente occorrenza"
msgid "end searching"
msgstr "termina la ricerca"
#: src/gui/client/stream-window.lisp:39
#: src/gui/client/stream-frame.lisp:54
msgid "Status"
msgstr "Stato"
#: src/gui/client/stream-window.lisp:40
#: src/gui/client/stream-frame.lisp:55
msgid "Number of octects downloaded"
msgstr "Numero di ottetti scaricati"
#: src/gui/client/stream-window.lisp:85
#: src/gui/client/stream-frame.lisp:106
msgid "delete selected stream"
msgstr "cancella i flussi selezionati"
#: src/gui/client/stream-window.lisp:86
#: src/gui/client/stream-frame.lisp:107
msgid "show selected stream"
msgstr "Mostra i flussi selezionati"
#: src/gui/client/stream-frame.lisp:108
msgid "close"
msgstr "chiudi"
#: src/gui/client/titan-window.lisp:74
msgid ""
"Neither a file to upload has been specified nor text data has been typed"
@ -1366,38 +1369,38 @@ msgstr "Nessuna timeline selezionata"
msgid "no folder selected"
msgstr "Nessuna cartella selezionata"
#: src/thread-window.lisp:426
#: src/thread-window.lisp:428
msgid "Missing subject"
msgstr "Oggetto mancante"
#: src/thread-window.lisp:781
#: src/thread-window.lisp:783
#, lisp-format
msgid "No message with index ~a exists"
msgstr "Nessun messaggio esiste alla posizione ~a"
#: src/thread-window.lisp:905
#: src/thread-window.lisp:907
msgid "No message to delete"
msgstr "Nessun messaggio da cancellare"
#: src/thread-window.lisp:915
#: src/thread-window.lisp:917
msgid "No message to undelete"
msgstr "Nessun messaggio segnato come cancellato da ripristinare"
#: src/thread-window.lisp:948 src/thread-window.lisp:982
#: src/thread-window.lisp:950 src/thread-window.lisp:984
#, lisp-format
msgid "No next message that contains ~s exists"
msgstr "Nessun messaggio successivo che contenga ~s esiste"
#: src/thread-window.lisp:954 src/thread-window.lisp:988
#: src/thread-window.lisp:956 src/thread-window.lisp:990
#, lisp-format
msgid "No previous message that contains ~s exists"
msgstr "Nessun messaggio precedente che contenga ~s esiste"
#: src/thread-window.lisp:1004
#: src/thread-window.lisp:1006
msgid "No others unread messages exist"
msgstr "Non ci sono altri messaggi non letti"
#: src/thread-window.lisp:1031
#: src/thread-window.lisp:1033
msgid "Threads"
msgstr "Discussioni"

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: tinmop 0.9.9.1414\n"
"Report-Msgid-Bugs-To: https://codeberg.org/cage/tinmop/\n"
"POT-Creation-Date: 2023-07-22 16:51+0200\n"
"POT-Creation-Date: 2023-07-27 16:28+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -76,7 +76,7 @@ msgid ""
"Error: was not able to create server socket to listen for authorization code"
msgstr ""
#: src/api-client.lisp:895
#: src/api-client.lisp:901
#, lisp-format
msgid "Initializing empty credentials file in ~a"
msgstr ""
@ -189,7 +189,7 @@ msgstr ""
msgid "Error: command ~a not found"
msgstr ""
#: src/conditions.lisp:77 src/conditions.lisp:81 src/db.lisp:2935
#: src/conditions.lisp:77 src/conditions.lisp:81 src/db.lisp:2936
#: src/message-rendering-utils.lisp:155 src/message-rendering-utils.lisp:189
#: src/message-rendering-utils.lisp:194
msgid "unknown"
@ -215,7 +215,7 @@ msgstr ""
msgid "home"
msgstr ""
#: src/db.lisp:3254
#: src/db.lisp:3255
msgid "no description"
msgstr ""
@ -310,7 +310,7 @@ msgid "Redirects to ~s, follows redirect? [y/N] "
msgstr ""
#: src/gemini-viewer.lisp:807 src/gui/server/public-api-gemini-stream.lisp:275
#: src/tui-utils.lisp:509 src/tui-utils.lisp:520 src/ui-goodies.lisp:2980
#: src/tui-utils.lisp:510 src/tui-utils.lisp:521 src/ui-goodies.lisp:2980
#, lisp-format
msgid "Error: ~a"
msgstr ""
@ -351,21 +351,21 @@ msgstr ""
msgid "Connection prematurely closed from the server: ~a"
msgstr ""
#: src/gempub.lisp:104
#: src/gempub.lisp:105
msgid "Syncing gempub library"
msgstr ""
#: src/gempub.lisp:123
#: src/gempub.lisp:124
#, lisp-format
msgid "Removed gempub ~s from library, missing file"
msgstr ""
#: src/gempub.lisp:125
#: src/gempub.lisp:126
#, lisp-format
msgid "Added gempub ~s into the library"
msgstr ""
#: src/gempub.lisp:308
#: src/gempub.lisp:309
msgid "Gempub library"
msgstr ""
@ -399,13 +399,12 @@ msgid "~s is not a valid gemini address"
msgstr ""
#: src/gui/client/bookmark-window.lisp:28 src/gui/client/main-window.lisp:215
#: src/gui/client/stream-window.lisp:73
msgid "Streams"
msgstr ""
#: src/gui/client/bookmark-window.lisp:34
#: src/gui/client/certificates-window.lisp:39
#: src/gui/client/gemlog-window.lisp:71 src/gui/client/stream-window.lisp:43
#: src/gui/client/gemlog-window.lisp:71 src/gui/client/stream-frame.lisp:58
#: src/gui/client/tour-window.lisp:41
msgid "Address"
msgstr ""
@ -611,16 +610,16 @@ msgstr ""
msgid "file ~a not found"
msgstr ""
#: src/gui/client/main-window.lisp:383 src/gui/client/main-window.lisp:993
#: src/gui/client/main-window.lisp:383 src/gui/client/main-window.lisp:996
msgid "Server certificate error"
msgstr ""
#: src/gui/client/main-window.lisp:399 src/gui/client/main-window.lisp:1014
#: src/gui/client/main-window.lisp:399 src/gui/client/main-window.lisp:1017
#, lisp-format
msgid "Follow redirection to ~a?"
msgstr ""
#: src/gui/client/main-window.lisp:400 src/gui/client/main-window.lisp:1015
#: src/gui/client/main-window.lisp:400 src/gui/client/main-window.lisp:1018
msgid "Redirection"
msgstr ""
@ -681,58 +680,58 @@ msgstr ""
msgid "No such file or directory: ~a"
msgstr ""
#: src/gui/client/main-window.lisp:896
#: src/gui/client/main-window.lisp:899
#, lisp-format
msgid "The server asks:~2%~a"
msgstr ""
#: src/gui/client/main-window.lisp:898
#: src/gui/client/main-window.lisp:901
msgid "Submit"
msgstr ""
#: src/gui/client/main-window.lisp:899
#: src/gui/client/main-window.lisp:902
msgid "Input query"
msgstr ""
#: src/gui/client/main-window.lisp:992
#: src/gui/client/main-window.lisp:995
msgid ""
"The certificate for this address has changed, replace the old with the one I "
"just received?"
msgstr ""
#: src/gui/client/main-window.lisp:1174
#: src/gui/client/main-window.lisp:1177
msgid "Tour is terminated"
msgstr ""
#: src/gui/client/main-window.lisp:1237
#: src/gui/client/main-window.lisp:1240
msgid "go back"
msgstr ""
#: src/gui/client/main-window.lisp:1238
#: src/gui/client/main-window.lisp:1241
msgid "reload address"
msgstr ""
#: src/gui/client/main-window.lisp:1239
#: src/gui/client/main-window.lisp:1242
msgid "go to address"
msgstr ""
#: src/gui/client/main-window.lisp:1240
#: src/gui/client/main-window.lisp:1243
msgid "one level up"
msgstr ""
#: src/gui/client/main-window.lisp:1241
#: src/gui/client/main-window.lisp:1244
msgid "add or remove bookmark"
msgstr ""
#: src/gui/client/main-window.lisp:1242
#: src/gui/client/main-window.lisp:1245
msgid "go to the next link in tour"
msgstr ""
#: src/gui/client/main-window.lisp:1243
#: src/gui/client/main-window.lisp:1246
msgid "subscribe/unsubscribe to this gemlog"
msgstr ""
#: src/gui/client/main-window.lisp:1244
#: src/gui/client/main-window.lisp:1247
msgid "inline images"
msgstr ""
@ -744,19 +743,19 @@ msgstr ""
msgid "No program defined in configuration file to edit this kind of files"
msgstr ""
#: src/gui/client/scheduler.lisp:50
#: src/gui/client/scheduler.lisp:62
msgid "Gemlogs subscriptions updating in progress…"
msgstr ""
#: src/gui/client/scheduler.lisp:52
#: src/gui/client/scheduler.lisp:64
msgid "Gemlogs subscriptions updated"
msgstr ""
#: src/gui/client/scheduler.lisp:56
#: src/gui/client/scheduler.lisp:68
msgid "Old gemlog posts deleted"
msgstr ""
#: src/gui/client/scheduler.lisp:60
#: src/gui/client/scheduler.lisp:72
msgid "Old history entries removed"
msgstr ""
@ -780,22 +779,26 @@ msgstr ""
msgid "end searching"
msgstr ""
#: src/gui/client/stream-window.lisp:39
#: src/gui/client/stream-frame.lisp:54
msgid "Status"
msgstr ""
#: src/gui/client/stream-window.lisp:40
#: src/gui/client/stream-frame.lisp:55
msgid "Number of octects downloaded"
msgstr ""
#: src/gui/client/stream-window.lisp:85
#: src/gui/client/stream-frame.lisp:106
msgid "delete selected stream"
msgstr ""
#: src/gui/client/stream-window.lisp:86
#: src/gui/client/stream-frame.lisp:107
msgid "show selected stream"
msgstr ""
#: src/gui/client/stream-frame.lisp:108
msgid "close"
msgstr ""
#: src/gui/client/titan-window.lisp:74
msgid ""
"Neither a file to upload has been specified nor text data has been typed"
@ -1335,38 +1338,38 @@ msgstr ""
msgid "no folder selected"
msgstr ""
#: src/thread-window.lisp:426
#: src/thread-window.lisp:428
msgid "Missing subject"
msgstr ""
#: src/thread-window.lisp:781
#: src/thread-window.lisp:783
#, lisp-format
msgid "No message with index ~a exists"
msgstr ""
#: src/thread-window.lisp:905
#: src/thread-window.lisp:907
msgid "No message to delete"
msgstr ""
#: src/thread-window.lisp:915
#: src/thread-window.lisp:917
msgid "No message to undelete"
msgstr ""
#: src/thread-window.lisp:948 src/thread-window.lisp:982
#: src/thread-window.lisp:950 src/thread-window.lisp:984
#, lisp-format
msgid "No next message that contains ~s exists"
msgstr ""
#: src/thread-window.lisp:954 src/thread-window.lisp:988
#: src/thread-window.lisp:956 src/thread-window.lisp:990
#, lisp-format
msgid "No previous message that contains ~s exists"
msgstr ""
#: src/thread-window.lisp:1004
#: src/thread-window.lisp:1006
msgid "No others unread messages exist"
msgstr ""
#: src/thread-window.lisp:1031
#: src/thread-window.lisp:1033
msgid "Threads"
msgstr ""

View File

@ -0,0 +1,116 @@
(in-package :client-stream-frame)
(named-readtables:in-readtable nodgui.syntax:nodgui-syntax)
(defclass stream-frame (gui:frame)
((table
:initform nil
:initarg :table
:accessor table)))
(defclass stream-table (gui-goodies:table-frame) ())
(defun resync-rows (stream-table new-rows)
(with-accessors ((tree gui-goodies:tree)
(rows gui-goodies:rows)) stream-table
(gui:treeview-delete-all tree)
(setf rows new-rows)
(loop for row in rows do
(let* ((iri (getf row :download-iri))
(stream-client-wrapper (client-main-window:find-db-stream-url iri))
(stream-status (to-s (client-main-window::status stream-client-wrapper)))
(tree-row (make-instance 'gui:tree-item
:id iri
:text iri
:column-values
(list stream-status
(to-s (getf row :octect-count)))
:index gui:+treeview-last-index+)))
(gui:treeview-insert-item tree :item tree-row)))
(gui:treeview-refit-columns-width (gui-goodies:tree stream-table))
stream-table))
(defun all-rows ()
(let ((rows (cev:enqueue-request-and-wait-results :gemini-all-stream-info
1
ev:+standard-event-priority+)))
(setf rows (sort rows
(lambda (a b) (string< (getf a :download-iri)
(getf b :download-iri)))))
rows))
(defun refresh-all-streams (stream-table)
(with-accessors ((tree gui-goodies:tree)
(rows gui-goodies:rows)) stream-table
(let ((new-rows (all-rows)))
(resync-rows stream-table new-rows)
stream-table)))
(defmethod initialize-instance :after ((object stream-table) &key &allow-other-keys)
(with-accessors ((tree gui-goodies:tree)) object
(let ((treeview (make-instance 'gui:scrolled-treeview
:master object
:pack '(:side :top :expand t :fill :both)
:columns (list (_ "Status")
(_ "Number of octects downloaded")))))
(gui:treeview-heading treeview
gui:+treeview-first-column-id+
:text (_ "Address"))
(setf tree treeview)
(refresh-all-streams object))))
(defun delete-stream-clsr (stream-table)
(with-accessors ((tree gui-goodies:tree)) stream-table
(lambda ()
(a:when-let* ((selections (gui:treeview-get-selection tree)))
(loop for selection in selections do
(let* ((url (gui:id selection))
(stream-client-wrapper (client-main-window::find-db-stream-url url)))
(when (eq (client-main-window:status stream-client-wrapper)
client-main-window:+stream-status-streaming+)
(ev:with-enqueued-process-and-unblock ()
(client-main-window:stop-steaming-stream-thread)))
(ev:with-enqueued-process-and-unblock ()
(client-main-window:remove-db-stream stream-client-wrapper)
(comm:make-request :gemini-remove-stream 1 url))
(let ((new-rows (all-rows)))
(resync-rows stream-table new-rows))))))))
(defun revive-stream-clsr (stream-table)
(with-accessors ((tree gui-goodies:tree)) stream-table
(lambda ()
(a:when-let* ((selections (gui:treeview-get-selection tree))
(selection (first selections)))
(let* ((url (gui:id selection))
(new-rows (all-rows)))
(client-main-window::open-iri url gui-goodies:*main-frame* t)
(resync-rows stream-table new-rows))))))
(defun init-frame (main-window)
(let* ((wrapper-frame (make-instance 'stream-frame :master main-window))
(table (make-instance 'stream-table :master wrapper-frame))
(buttons-frame (make-instance 'gui:frame :master wrapper-frame))
(delete-button (make-instance 'gui:button
:master buttons-frame
:image icons:*document-delete*
:command (delete-stream-clsr table)))
(revive-button (make-instance 'gui:button
:master buttons-frame
:image icons:*document-accept*
:command (revive-stream-clsr table)))
(close-button (make-instance 'gui:button :image icons:*cross*
:master buttons-frame
:command (lambda ()
(gui:grid-forget wrapper-frame)))))
(setf (table wrapper-frame) table)
(gui-goodies:attach-tooltips (delete-button (_ "delete selected stream"))
(revive-button (_ "show selected stream"))
(close-button (_ "close")))
(gui:grid table 0 0 :sticky :news)
(gui:grid buttons-frame 1 0 :sticky :s)
(gui:grid delete-button 0 0 :sticky :s)
(gui:grid revive-button 0 1 :sticky :s)
(gui:grid close-button 0 2 :sticky :s)
(gui:grid-columnconfigure wrapper-frame 0 :weight 1)
(gui:grid-rowconfigure wrapper-frame 1 :weight 1)
wrapper-frame))