From 652a09177aec5c0a1fd69c8ab4df3927853d19cb Mon Sep 17 00:00:00 2001 From: cage Date: Sun, 9 Apr 2023 11:29:01 +0200 Subject: [PATCH] - [GUI] added code to render the bookmarks page. --- src/constants.lisp | 4 +++- src/gui/client/gui-goodies.lisp | 3 +++ src/gui/client/main-window.lisp | 36 +++++++++++++++++--------------- src/gui/client/menu-command.lisp | 11 ++++++++++ src/package.lisp | 13 +++++++++--- 5 files changed, 46 insertions(+), 21 deletions(-) diff --git a/src/constants.lisp b/src/constants.lisp index 1cc86b0..48aa546 100644 --- a/src/constants.lisp +++ b/src/constants.lisp @@ -163,4 +163,6 @@ General Public License for more details." (define-constant +gemini-file-extension+ "gmi" :test #'string=) -(define-constant +file-scheme+ "file" :test #'string=) +(define-constant +file-scheme+ "file" :test #'string=) + +(define-constant +internal-scheme+ "about" :test #'string=) diff --git a/src/gui/client/gui-goodies.lisp b/src/gui/client/gui-goodies.lisp index 0bcb033..8752554 100644 --- a/src/gui/client/gui-goodies.lisp +++ b/src/gui/client/gui-goodies.lisp @@ -127,3 +127,6 @@ :accessor rows :initform '() :initarg :rows))) + +(defun make-internal-iri (path &optional (query nil) (fragment nil)) + (iri:make-iri +internal-scheme+ nil nil nil path query fragment)) diff --git a/src/gui/client/main-window.lisp b/src/gui/client/main-window.lisp index b7bfba8..6685fe7 100644 --- a/src/gui/client/main-window.lisp +++ b/src/gui/client/main-window.lisp @@ -193,17 +193,20 @@ (setf (fetching-thread stream-wrapper) stream-thread) stream-wrapper))))) - -(defun initialize-menu (parent) - (with-accessors ((main-window main-window)) parent - (let* ((bar (gui:make-menubar parent)) - (file (gui:make-menu bar (_ "File") :underline 0)) - (tools (gui:make-menu bar (_ "Tools") :underline 0)) - (help (gui:make-menu bar (_ "Help") :underline 0))) - (gui:make-menubutton tools (_ "Certificates") #'menu:show-certificates :underline 0) - (gui:make-menubutton tools (_ "Streams") #'menu:show-streams :underline 0) - (gui:make-menubutton file (_ "Quit") #'menu:quit :underline 0) - (gui:make-menubutton help (_ "About") #'menu:help-about :underline 0)))) +(defun initialize-menu (parent main-window) + (let* ((bar (gui:make-menubar parent)) + (file (gui:make-menu bar (_ "File") :underline 0)) + (tools (gui:make-menu bar (_ "Tools") :underline 0)) + (bookmarks (gui:make-menu bar (_ "Bookmarks") :underline 0)) + (help (gui:make-menu bar (_ "Help") :underline 0))) + (gui:make-menubutton tools (_ "Certificates") #'menu:show-certificates :underline 0) + (gui:make-menubutton tools (_ "Streams") #'menu:show-streams :underline 0) + (gui:make-menubutton file (_ "Quit") #'menu:quit :underline 0) + (gui:make-menubutton help (_ "About") #'menu:help-about :underline 0) + (gui:make-menubutton bookmarks + (_ "Show") + (menu:show-bookmarks-clsr main-window) + :underline 0))) (defclass tool-bar (gui:frame) ((iri-entry @@ -843,11 +846,7 @@ (gui-goodies:gui-resize-grid-all object))) (defclass main-frame (gui:frame) - ((main-window - :initform nil - :initarg :main-window - :accessor main-window) - (gemtext-widget + ((gemtext-widget :initform nil :initarg :gemtext-widget :accessor gemtext-widget) @@ -947,15 +946,18 @@ (defun set-text-gemtext (main-window text) (setf (gui:text (gemtext-widget main-window)) text)) +(defun set-address-bar-text (main-window text) + (setf (gui:text (iri-entry (tool-bar main-window))) text)) + (defun init-main-window () (let ((gui:*debug-tk* nil)) (gui:with-nodgui (:title +program-name+) (icons:load-icons) - (initialize-menu gui:*tk*) (setf gui-goodies:*toplevel* gui:*tk*) (setf gui-goodies:*gui-server* gui:*wish*) (client-events:start-events-loop) (let ((main-frame (make-instance 'main-frame))) (setf gui-goodies:*main-frame* main-frame) + (initialize-menu gui:*tk* main-frame) (gui:grid main-frame 0 0 :sticky :nswe) (gui-goodies:gui-resize-grid-all gui-goodies:*toplevel*))))) diff --git a/src/gui/client/menu-command.lisp b/src/gui/client/menu-command.lisp index c33c571..3603ffd 100644 --- a/src/gui/client/menu-command.lisp +++ b/src/gui/client/menu-command.lisp @@ -24,3 +24,14 @@ (defun show-streams () (let ((master gui-goodies:*toplevel*)) (client-stream-window:init-window master))) + +(defun show-bookmarks-clsr (main-window) + (lambda () + (ev:with-enqueued-process-and-unblock () + (let ((parsed-page (comm:make-request :gemini-generate-bookmark-page 1)) + (iri (gui-goodies:make-internal-iri "bookmark"))) + (client-main-window:set-address-bar-text main-window (to-s iri)) + (client-main-window:clean-gemtext main-window) + (client-main-window::collect-ir-lines (to-s iri) + main-window + parsed-page))))) diff --git a/src/package.lisp b/src/package.lisp index 8337b55..9d74027 100644 --- a/src/package.lisp +++ b/src/package.lisp @@ -69,6 +69,7 @@ :+octect-type+ :+gemini-file-extension+ :+file-scheme+ + :+internal-scheme+ ;; GUI :+minimum-padding+ :+ps-file-dialog-filter+ @@ -3381,7 +3382,8 @@ :password-dialog :table-frame :tree - :rows)) + :rows + :make-internal-iri)) (defpackage :client-menu-command (:use @@ -3403,7 +3405,8 @@ :help-about :quit :show-certificates - :show-streams)) + :show-streams + :show-bookmarks-clsr)) (defpackage :client-certificates-window (:use @@ -3491,7 +3494,11 @@ :remove-db-stream :find-db-stream-url :open-local-path - :init-main-window)) + :init-main-window + :set-address-bar-text + :set-bookmark-button-true + :set-bookmark-button-false + :clean-gemtext)) (defpackage :main (:use