• R/O
  • SSH

cl-sack: Commit

CL-Sack is a Common Lisp library for making and manipulating Sack files.


Commit MetaInfo

Revision3ead5084710a54aeb7bc40ed0b187cfbd6a3d02a (tree)
Time2019-02-18 22:03:25
AuthorAlexa Jones-Gonzales <alexa@part...>
CommiterAlexa Jones-Gonzales

Log Message

Started to implement metadata editing

Change Summary

Incremental Difference

diff -r 23ebf3368506 -r 3ead5084710a gsacked-src/gui-main-window.lisp
--- a/gsacked-src/gui-main-window.lisp Mon Feb 18 06:03:13 2019 -0700
+++ b/gsacked-src/gui-main-window.lisp Mon Feb 18 06:03:25 2019 -0700
@@ -52,6 +52,10 @@
5252 :initform nil
5353 :reader data-pane)
5454
55+ (metadata-pane
56+ :initform nil
57+ :reader metadata-pane)
58+
5559 (interaction-pane
5660 :initform nil
5761 :reader interactor))
@@ -70,6 +74,12 @@
7074 :incremental-redisplay t
7175 :display-function 'display-entry-metadata)
7276
77+ (new-metadata :push-button
78+ :label "New Metadata Pair"
79+ :activate-callback #'(lambda (x)
80+ (declare (ignore x))
81+ (com/new-metadata-pair)))
82+
7383 (pdoc :pointer-documentation))
7484
7585 (:menu-bar menu/main-window)
@@ -86,15 +96,22 @@
8696 (1/5 (labelling (:label "Entry Information")
8797 data-view))
8898 (+fill+ (labelling (:label "Entry Metadata")
89- metadata-view))))))
99+ metadata-view))
100+
101+ (1/8 new-metadata)))))
90102
91103 (1/4 int)
92104
93105 pdoc))))
94106
95107 (defmethod initialize-instance :after ((obj main-window) &key)
96- (setf (slot-value obj 'interaction-pane) (find-pane-named obj 'int))
97- (setf (slot-value obj 'data-pane) (find-pane-named obj 'data-view)))
108+ (with-slots ((ip interaction-pane)
109+ (dp data-pane)
110+ (mp metadata-pane))
111+ obj
112+ (setf ip (find-pane-named obj 'int))
113+ (setf dp (find-pane-named obj 'data-view))
114+ (setf mp (find-pane-named obj 'metadata-view))))
98115
99116 ;;;
100117 ;;; Entry Commands
@@ -108,7 +125,7 @@
108125 (let ((new-name "")
109126 (new-type :data)
110127 (stream (frame-standard-input *main-window*)))
111- (window-clear stream)
128+
112129 (accepting-values (stream :own-window t)
113130 (setf new-name (accept 'string :stream stream :prompt "Name"))
114131 (terpri stream)
@@ -163,7 +180,20 @@
163180 (terpri stream))))
164181
165182 (defmethod display-entry-metadata ((frame main-window) stream)
166- t)
183+ (let ((ent (selected-entry frame)))
184+ (when ent
185+ (updating-output (stream :unique-id ent)
186+ (formatting-table (stream)
187+ (cl-sack:with-all-metadata (key val ent)
188+ (formatting-row (stream)
189+ (formatting-cell (stream)
190+ (write-sack-entry-metadata-key stream ent key))
191+
192+ (formatting-cell (stream)
193+ (write-sack-entry-metadata-value stream ent key)))))
194+
195+ (italicized (stream) (format nil "~%Total metadata pairs: "))
196+ (format stream "~:d~%" (cl-sack:get-metadata-count ent))))))
167197
168198 (define-main-window-command (com/rename-entry :name nil)
169199 ((ent sack-entry-name :gesture :select))
@@ -186,6 +216,39 @@
186216 (:data cl-sack:+entry-type-data+)
187217 (:sack cl-sack:+entry-type-sack+)))))
188218
219+(define-main-window-command (com/new-metadata-pair :name nil)
220+ ()
221+ (let ((new-key "")
222+ (new-value "")
223+ (ent (selected-entry *main-window*))
224+ (stream (frame-standard-input *main-window*)))
225+
226+ (cond
227+ (ent
228+ (accepting-values (stream :own-window t)
229+ (setf new-key (accept 'string :stream stream :prompt "Key"))
230+ (terpri stream)
231+
232+ (setf new-value (accept 'string :stream stream :prompt "Value"))
233+ (terpri stream))
234+
235+ (setf (cl-sack:get-metadata ent new-key) new-value))
236+
237+ (t (format-error stream "No entry selected~%")))))
238+
239+(define-main-window-command (com/change-metadata-key :name nil)
240+ ((key sack-entry-metadata-key :gesture :select))
241+ (let ((ent (selected-entry *main-window*)))
242+ (if ent
243+ (let* ((old-val (cl-sack:get-metadata ent key))
244+ (new-key (accept 'string :default key
245+ :stream (frame-standard-input *main-window*)
246+ :prompt "New key")))
247+ (cl-sack:remove-metadata ent key)
248+ (setf (cl-sack:get-metadata ent new-key) old-val))
249+
250+ (format-error nil "No entry selected~%"))))
251+
189252 ;;;
190253 ;;; Menus and Other Commands
191254 ;;;
diff -r 23ebf3368506 -r 3ead5084710a gsacked-src/presentations.lisp
--- a/gsacked-src/presentations.lisp Mon Feb 18 06:03:13 2019 -0700
+++ b/gsacked-src/presentations.lisp Mon Feb 18 06:03:25 2019 -0700
@@ -15,20 +15,30 @@
1515 ;;;; along with this program. If not, see <http://www.gnu.org/licenses/>.
1616 (in-package :p36.gsacked)
1717
18+;;;
19+;;;
20+;;;
21+
1822 (define-presentation-type cl-sack:sack-entry ())
1923
2024 (define-presentation-method present (object (type cl-sack:sack-entry) stream view &key)
2125 (declare (ignore view))
26+ (write-string (cl-sack:name object) stream))
2227
23- (write-string (cl-sack:name object) stream))
28+;;;
29+;;;
30+;;;
2431
2532 (define-presentation-type sack-entry-name ())
2633 (defmacro write-sack-entry-name (stream ent)
2734 `(with-output-as-presentation (,stream ,ent 'sack-entry-name)
2835 (write-string (cl-sack:name ,ent) ,stream)))
2936
37+;;;
38+;;;
39+;;;
40+
3041 (define-presentation-type cl-sack:t/entry-type ())
31-
3242 (define-presentation-method present (object (type cl-sack:t/entry-type) stream view &key)
3343 (declare (ignore view))
3444
@@ -42,3 +52,19 @@
4252 (cl-sack:number->entry-type-name (cl-sack:parent ,ent)
4353 (cl-sack:entry-type ,ent))
4454 ,stream)))
55+
56+;;;
57+;;;
58+;;;
59+
60+(define-presentation-type sack-entry-metadata-key (entry))
61+(define-presentation-type sack-entry-metadata-value (entry))
62+
63+(defmacro write-sack-entry-metadata-key (stream ent key)
64+ `(with-text-face (,stream :italic)
65+ (with-output-as-presentation (,stream (list ,key ,ent) 'sack-entry-metadata-key)
66+ (write-string ,key ,stream))))
67+
68+(defmacro write-sack-entry-metadata-value (stream ent key)
69+ `(with-output-as-presentation (,stream (list ,key ,ent) 'sack-entry-metadata-value)
70+ (write-string (cl-sack:get-metadata ,ent ,key) ,stream)))
Show on old repository browser