From 9c7800d981b34c701f200f7c1e72ef2b678ac4bc Mon Sep 17 00:00:00 2001 From: Matt Courtney Date: Thu, 21 Jul 2011 15:32:40 -0400 Subject: [PATCH] You can now view and accept an offer from the view identity window. Also updated the Seesaw 1.0.9. --- project.clj | 2 +- src/darkexchange/controller/identity/view.clj | 80 +++++++++++++++---- .../controller/main/home/open_trade_panel.clj | 3 +- .../controller/offer/open_offer_table.clj | 13 ++- src/darkexchange/model/calls/accept_offer.clj | 7 +- src/darkexchange/model/identity.clj | 3 +- src/darkexchange/model/offer.clj | 3 +- src/darkexchange/view/identity/view.clj | 9 ++- 8 files changed, 92 insertions(+), 28 deletions(-) diff --git a/project.clj b/project.clj index 82ef8b0..c6294c7 100755 --- a/project.clj +++ b/project.clj @@ -11,7 +11,7 @@ [org.clojars.macourtney/streaming "0.8.7-0"] [org.clojure/clojure "1.2.1"] [org.clojure/clojure-contrib "1.2.0"] - [seesaw "1.0.7"]] + [seesaw "1.0.9"]] :dev-dependencies [[drift "1.2.1"] [lein-tar "1.0.6"]] diff --git a/src/darkexchange/controller/identity/view.clj b/src/darkexchange/controller/identity/view.clj index c30403d..d3329b3 100755 --- a/src/darkexchange/controller/identity/view.clj +++ b/src/darkexchange/controller/identity/view.clj @@ -2,7 +2,9 @@ (:require [clojure.contrib.logging :as logging] [darkexchange.controller.actions.utils :as actions-utils] [darkexchange.controller.offer.open-offer-table :as open-offer-table-controller] + [darkexchange.controller.offer.view :as offer-view-controller] [darkexchange.controller.utils :as controller-utils] + [darkexchange.controller.widgets.utils :as widgets-utils] [darkexchange.model.calls.get-open-offers :as get-open-offers-call] [darkexchange.model.identity :as identity-model] [darkexchange.model.offer :as offer-model] @@ -10,42 +12,86 @@ [darkexchange.view.identity.view :as identity-view] [seesaw.core :as seesaw-core])) +(defn find-name-label [parent-component] + (controller-utils/find-component parent-component "#name-label")) + +(defn find-public-key-label [parent-component] + (controller-utils/find-component parent-component "#public-key-label")) + +(defn find-algorithm-label [parent-component] + (controller-utils/find-component parent-component "#public-key-algorithm-label")) + +(defn find-is-online-label [parent-component] + (controller-utils/find-component parent-component "#is-online-label")) + +(defn find-status-label [parent-component] + (controller-utils/find-component parent-component "#offer-table-status-label")) + +(defn find-view-offer-button [parent-component] + (seesaw-core/select parent-component ["#view-offer-button"])) + (defn attach-cancel-action [parent-component] (actions-utils/attach-window-close-listener parent-component "#cancel-button")) -(defn attach [parent-component offer] - (attach-cancel-action parent-component)) +(defn selected-offer [parent-component] + (open-offer-table-controller/selected-offer parent-component)) -(defn find-name-label [parent-component] - (controller-utils/find-component parent-component "#name-label")) +(defn original-selected-offer [parent-component] + (:original-offer (selected-offer parent-component))) + +(defn selected-view-offer [parent-component] + (let [original-offer (original-selected-offer parent-component) + identity (:identity original-offer)] + { :id (:id original-offer) + :public-key (:public_key identity) + :public-key-algorithm (:public_key_algorithm identity) + :name (:name identity) + :wants (offer-model/wants-amount-str original-offer) + :to_receive_by (offer-model/wants-payment-type-str original-offer) + :has (offer-model/has-amount-str original-offer) + :to_send_by (offer-model/has-payment-type-str original-offer) })) + +(defn view-offer-listener [parent-component] + (offer-view-controller/show parent-component + (selected-view-offer parent-component))) + +(defn attach-view-offer-action [parent-component] + (actions-utils/attach-listener parent-component "#view-offer-button" + (fn [_] (view-offer-listener parent-component)))) + +(defn view-offer-if-enabled [parent-component] + (widgets-utils/do-click-if-enabled (find-view-offer-button parent-component))) + +(defn attach-view-offer-table-action [parent-component] + (open-offer-table-controller/attach-table-action parent-component #(view-offer-if-enabled parent-component))) + +(defn attach-view-offer-button-enable-listener [parent-component] + (open-offer-table-controller/attach-single-select-button-enable-listener parent-component + (find-view-offer-button parent-component))) + +(defn attach-view-offer-actions [parent-component] + (attach-view-offer-button-enable-listener + (attach-view-offer-table-action + (attach-view-offer-action parent-component)))) + +(defn attach [parent-component offer] + (attach-view-offer-actions (attach-cancel-action parent-component))) (defn load-name [parent-component identity] (seesaw-core/config! (find-name-label parent-component) :text (:name identity))) -(defn find-public-key-label [parent-component] - (controller-utils/find-component parent-component "#public-key-label")) - (defn load-public-key [parent-component identity] (seesaw-core/config! (find-public-key-label parent-component) :text (identity-model/shortened-public-key identity))) -(defn find-algorithm-label [parent-component] - (controller-utils/find-component parent-component "#public-key-algorithm-label")) - (defn load-algorithm [parent-component identity] (seesaw-core/config! (find-algorithm-label parent-component) :text (:public_key_algorithm identity))) -(defn find-is-online-label [parent-component] - (controller-utils/find-component parent-component "#is-online-label")) - (defn load-is-online [parent-component identity] (seesaw-core/config! (find-is-online-label parent-component) :text (if (identity-model/is-online? identity) (terms/yes) (terms/no)))) -(defn find-status-label [parent-component] - (controller-utils/find-component parent-component "#offer-table-status-label")) - (defn set-table-status [parent-component status-text] (seesaw-core/config! (find-status-label parent-component) :text (terms/status-parens status-text))) @@ -62,7 +108,7 @@ (defn load-offers [parent-component identity] (future (let [open-offers (get-open-offers-call/call (identity-model/get-record (:id identity)))] - (seesaw-core/invoke-later (set-offers parent-component open-offers))))) + (seesaw-core/invoke-later (set-offers parent-component (map #(assoc % :identity identity) open-offers)))))) (defn load-data [parent-component identity] (load-name parent-component identity) diff --git a/src/darkexchange/controller/main/home/open_trade_panel.clj b/src/darkexchange/controller/main/home/open_trade_panel.clj index be524b5..acb68be 100755 --- a/src/darkexchange/controller/main/home/open_trade_panel.clj +++ b/src/darkexchange/controller/main/home/open_trade_panel.clj @@ -1,5 +1,6 @@ (ns darkexchange.controller.main.home.open-trade-panel - (:require [darkexchange.controller.actions.utils :as action-utils] + (:require [clojure.contrib.logging :as logging] + [darkexchange.controller.actions.utils :as action-utils] [darkexchange.controller.trade.view :as view-trade] [darkexchange.controller.widgets.utils :as widgets-utils] [darkexchange.model.trade :as trade-model] diff --git a/src/darkexchange/controller/offer/open_offer_table.clj b/src/darkexchange/controller/offer/open_offer_table.clj index a567a99..d0da65e 100755 --- a/src/darkexchange/controller/offer/open_offer_table.clj +++ b/src/darkexchange/controller/offer/open_offer_table.clj @@ -1,5 +1,6 @@ (ns darkexchange.controller.offer.open-offer-table - (:require [darkexchange.model.offer :as offer-model] + (:require [darkexchange.controller.widgets.utils :as widgets-utils] + [darkexchange.model.offer :as offer-model] [darkexchange.view.offer.open-offer-table :as open-offer-table-view] [seesaw.core :as seesaw-core] [seesaw.table :as seesaw-table])) @@ -45,4 +46,12 @@ (defn update-offer [parent-component offer] (let [open-offer-table (find-open-offer-table parent-component)] (when-let [offer-index (find-offer-index open-offer-table offer)] - (replace-offer-at open-offer-table offer offer-index)))) \ No newline at end of file + (replace-offer-at open-offer-table offer offer-index)))) + +(defn attach-single-select-button-enable-listener [parent-component button] + (widgets-utils/single-select-table-button button (find-open-offer-table parent-component)) + parent-component) + +(defn attach-table-action [parent-component action-fn] + (widgets-utils/add-table-action (find-open-offer-table parent-component) action-fn) + parent-component) \ No newline at end of file diff --git a/src/darkexchange/model/calls/accept_offer.clj b/src/darkexchange/model/calls/accept_offer.clj index 1ce7be1..a5d3d4c 100755 --- a/src/darkexchange/model/calls/accept_offer.clj +++ b/src/darkexchange/model/calls/accept_offer.clj @@ -17,9 +17,10 @@ (defn update-trade [initial-trade response-map] (if-let [foreign-trade-id (:trade-id (:data response-map))] (when-let [other-identity (interchange-map-util/from-identity response-map)] - (when-let [offer (find-offer initial-trade response-map)] - (trade-model/set-foreign-trade-id (:id initial-trade) foreign-trade-id))) - (trade-model/destroy-record { :id (:id initial-trade) }))) + (if-let [offer (find-offer initial-trade response-map)] + (trade-model/set-foreign-trade-id (:id initial-trade) foreign-trade-id) + (trade-model/destroy-record initial-trade))) + (trade-model/destroy-record initial-trade))) (defn find-identity ([offer] (find-identity (:name offer) (:public-key offer) (:public-key-algorithm offer))) diff --git a/src/darkexchange/model/identity.clj b/src/darkexchange/model/identity.clj index 5e77e9d..afa7d49 100755 --- a/src/darkexchange/model/identity.clj +++ b/src/darkexchange/model/identity.clj @@ -121,7 +121,8 @@ (find-identity (:name user) (:public_key user) (:public_key_algorithm user)))) (defn shortened-public-key-str [public-key] - (str ".." (.substring public-key 40 60) "..")) + (when public-key + (str ".." (.substring public-key 40 60) ".."))) (defn shortened-public-key [identity] (shortened-public-key-str (:public_key identity))) diff --git a/src/darkexchange/model/offer.clj b/src/darkexchange/model/offer.clj index 4bb8bcd..b5c66e1 100755 --- a/src/darkexchange/model/offer.clj +++ b/src/darkexchange/model/offer.clj @@ -142,7 +142,8 @@ :i-want-amount (wants-amount-str offer) :i-want-to-receive-by (wants-payment-type-str offer) :has-div-wants (calculate-has-div-wants offer) - :wants-div-has (calculate-wants-div-has offer) }) + :wants-div-has (calculate-wants-div-has offer) + :original-offer offer }) (defn table-open-offers [] (map convert-to-table-offer (open-offers))) \ No newline at end of file diff --git a/src/darkexchange/view/identity/view.clj b/src/darkexchange/view/identity/view.clj index 5972cae..6df209d 100755 --- a/src/darkexchange/view/identity/view.clj +++ b/src/darkexchange/view/identity/view.clj @@ -36,14 +36,19 @@ (defn create-offer-table-title [] (seesaw-core/horizontal-panel :items [ (terms/offers) - [:fill-v 3] + [:fill-h 3] (seesaw-core/label :id :offer-table-status-label :text (terms/status-parens (terms/loading)))])) +(defn create-offer-table-button-panel [] + (seesaw-core/horizontal-panel + :items [ (seesaw-core/button :id :view-offer-button :text (terms/view) :enabled? false) ])) + (defn create-offer-table-header [] (seesaw-core/border-panel :border 5 :hgap 5 - :west (create-offer-table-title))) + :west (create-offer-table-title) + :east (create-offer-table-button-panel))) (defn create-offer-table-panel [] (seesaw-core/border-panel