CLicking on an id in the article panel will load the article from the DB into the article tree.

This commit is contained in:
Robert C. Martin 2023-02-13 14:19:36 -06:00
parent d9b32be803
commit 02ec1ae707
6 changed files with 73 additions and 52 deletions

View File

@ -1,9 +1,9 @@
(ns more-speech.ui.swing.article-tree-util-spec
(ns more-speech.ui.swing.article-panel-util-spec
(:require [speclj.core :refer :all]
[more-speech.mem :refer :all]
[more-speech.ui.swing.article-tree-util :refer :all :as article-tree-util]))
[more-speech.ui.swing.article-panel-util :refer :all]))
(describe "Article Tree Util"
(describe "article-panel-util"
(before (clear-mem))
(context "adjust-back-count"
@ -26,7 +26,7 @@
(context "go-back-by"
(with-stubs)
(it "displays the appropriate event and tab"
(with-redefs [article-tree-util/display-event (stub :display-event)]
(with-redefs [display-event (stub :display-event)]
(set-mem :event-history [[:t1 1] [:t2 2]])
(set-mem :back-count 0)
(go-back-by 1)

View File

@ -15,7 +15,8 @@
(defprotocol event-handler
(handle-text-event [handler event])
(update-relay-panel [handler]))
(update-relay-panel [handler])
(immediate-add-text-event [handler event]))
(defn fix-name [name]
(if (empty? name)

View File

@ -4,7 +4,7 @@
[more-speech.nostr.util :as util]
[more-speech.ui.formatters :as formatters]
[more-speech.ui.formatter-util :as f-util]
[more-speech.ui.swing.article-tree-util :as article-tree-util]
[more-speech.ui.swing.article-panel-util :as article-panel-util]
[more-speech.ui.swing.edit-window :as edit-window]
[more-speech.mem :refer :all]
[more-speech.ui.swing.util :as swing-util :refer [copy-to-clipboard]]
@ -27,7 +27,7 @@
(defn id-click [e]
(if (.isPopupTrigger e)
(copy-click e)
(article-tree-util/id-click (config e :user-data))))
(article-panel-util/id-click (config e :user-data))))
(defn reaction-click [polarity]
(let [frame (get-mem :frame)
@ -113,10 +113,10 @@
:text editor-pane-stylesheet))
(defn go-back [_e]
(article-tree-util/go-back-by 1))
(article-panel-util/go-back-by 1))
(defn go-forward [_e]
(article-tree-util/go-back-by -1))
(article-panel-util/go-back-by -1))
(defn make-control-panel []
(let [reply-button (button :text "Reply")

View File

@ -0,0 +1,60 @@
(ns more-speech.ui.swing.article-panel-util
(:use [seesaw core])
(:require [more-speech.mem :refer :all]
[more-speech.nostr.event-handlers :as event-handlers]
[more-speech.ui.swing.util :as util]
[more-speech.db.gateway :as gateway]
[more-speech.config :refer [get-db]]
[more-speech.ui.swing.article-tree-util :as at-util]))
(defn load-event [id]
(when-not (contains? (get-mem :node-map) id)
(let [event (gateway/get-event (get-db) id)
handler (get-mem :event-handler)]
(when (some? event)
(event-handlers/immediate-add-text-event handler event)))))
(defn id-click [id]
(load-event id)
(let [frame (get-mem :frame)
tab-index (get-mem :selected-tab)
tab-selector (keyword (str "#" tab-index))
tree (select frame [tab-selector])
model (config tree :model)
root-node (.getRoot model)
node (at-util/find-header-node root-node id)]
(if (some? node)
(at-util/select-tree-node tree node)
(let [tree (select frame [(keyword (str "#" (util/get-tab-index "all")))])
model (config tree :model)
root-node (.getRoot model)
node (at-util/find-header-node root-node id)]
(when (some? node)
(util/select-tab "all")
(at-util/select-tree-node tree node))))))
(defn display-event [tab-index event-id]
(let [frame (get-mem :frame)
tab-selector (keyword (str "#" tab-index))
tree (select frame [tab-selector])
model (config tree :model)
root-node (.getRoot model)
node (at-util/find-header-node root-node event-id)]
(when (some? node)
(util/select-tab tab-index)
(at-util/select-tree-node tree node))))
(defn adjust-back-count [n]
(let [event-history (get-mem :event-history)
back-count (-> (get-mem :back-count) (+ n) (max 0) (min (dec (count event-history))))]
(set-mem :back-count back-count)
(set-mem :backing-up true)))
(defn go-back-by [n]
(let [event-history (get-mem :event-history)]
(when-not (empty? event-history)
(adjust-back-count n)
(let [back-count (get-mem :back-count)
event-position (- (count event-history) back-count 1)
[tab-index event-id] (nth event-history event-position)]
(display-event tab-index event-id)))))

View File

@ -1,7 +1,6 @@
(ns more-speech.ui.swing.article-tree-util
(:use [seesaw core])
(:require [more-speech.mem :refer :all]
[more-speech.ui.swing.util :as util]
[more-speech.db.gateway :as gateway]
[more-speech.config :refer [get-db]])
(:import (java.util Collections)
@ -53,46 +52,5 @@
(.setSelectionPath tree tree-path)
(.scrollPathToVisible tree tree-path)))
(defn id-click [id]
(let [frame (get-mem :frame)
tab-index (get-mem :selected-tab)
tab-selector (keyword (str "#" tab-index))
tree (select frame [tab-selector])
model (config tree :model)
root-node (.getRoot model)
node (find-header-node root-node id)]
(if (some? node)
(select-tree-node tree node)
(let [tree (select frame [(keyword (str "#" (util/get-tab-index "all")))])
model (config tree :model)
root-node (.getRoot model)
node (find-header-node root-node id)]
(when (some? node)
(util/select-tab "all")
(select-tree-node tree node))))))
(defn adjust-back-count [n]
(let [event-history (get-mem :event-history)
back-count (-> (get-mem :back-count) (+ n) (max 0) (min (dec (count event-history))))]
(set-mem :back-count back-count)
(set-mem :backing-up true)))
(defn display-event [tab-index event-id]
(let [frame (get-mem :frame)
tab-selector (keyword (str "#" tab-index))
tree (select frame [tab-selector])
model (config tree :model)
root-node (.getRoot model)
node (find-header-node root-node event-id)]
(when (some? node)
(util/select-tab tab-index)
(select-tree-node tree node))))
(defn go-back-by [n]
(let [event-history (get-mem :event-history)]
(when-not (empty? event-history)
(adjust-back-count n)
(let [back-count (get-mem :back-count)
event-position (- (count event-history) back-count 1)
[tab-index event-id] (nth event-history event-position)]
(display-event tab-index event-id)))))

View File

@ -20,7 +20,9 @@
(handle-text-event [_handler event]
(invoke-later (article-tree/add-event event)))
(update-relay-panel [_handler]
(invoke-later (relay-panel/update-relay-panel))))
(invoke-later (relay-panel/update-relay-panel)))
(immediate-add-text-event [_handler event]
(article-tree/add-event event)))
(defn open-link [e]
(when (= HyperlinkEvent$EventType/ACTIVATED (.getEventType e))