From: John Benediktsson Date: Tue, 25 Jan 2022 21:59:24 +0000 (-0800) Subject: ui.tools.button-list: per-world popup X-Git-Tag: 0.99~1643 X-Git-Url: https://gitweb.factorcode.org/gitweb.cgi?p=factor.git;a=commitdiff_plain;h=449ab6e0a6f3dfadc269feda42bb7d5508d088a8 ui.tools.button-list: per-world popup --- diff --git a/basis/ui/tools/button-list/button-list.factor b/basis/ui/tools/button-list/button-list.factor index b0029e5b74..87678d758e 100644 --- a/basis/ui/tools/button-list/button-list.factor +++ b/basis/ui/tools/button-list/button-list.factor @@ -1,11 +1,12 @@ ! Copyright (C) 2021 Kevin Cope. ! See http://factorcode.org/license.txt for BSD license. -USING: accessors arrays assocs classes kernel math.rectangles +USING: accessors arrays assocs classes kernel math.rectangles models models.arrow namespaces sequences ui ui.gadgets -ui.gadgets.buttons ui.gadgets.glass ui.gadgets.labeled +ui.gadgets.buttons ui.gadgets.glass ui.gadgets.labeled ui.gadgets.presentations ui.gadgets.search-tables -ui.gadgets.labels ui.gadgets.tables ui.gadgets.wrappers ui.gestures -ui.theme ui.tools.browser.popups ui.tools.common ; +ui.gadgets.labels ui.gadgets.tables ui.gadgets.worlds +ui.gadgets.wrappers ui.gestures ui.theme ui.tools.browser.popups +ui.tools.common ; FROM: ui.gadgets.wrappers => wrapper ; IN: ui.tools.button-list @@ -20,19 +21,25 @@ active-buttons [ H{ } ] initialize : label-from-button ( button -- str/f ) children>> [ label? ] find swap [ text>> ] [ drop f ] if ; +: world-buttons ( -- assoc ) + world get active-buttons get [ drop H{ } clone ] cache ; + : store-labelled-button ( button -- str/f ) - dup label-from-button [ [ active-buttons get set-at ] keep ] [ drop f ] if* ; + dup label-from-button [ [ world-buttons set-at ] keep ] [ drop f ] if* ; : remove-labelled-button ( button -- str/f ) - label-from-button [ dup active-buttons get delete-at ] [ f ] if* ; + label-from-button [ dup world-buttons delete-at ] [ f ] if* ; + +M: clickable graft* + [ store-labelled-button drop ] [ call-next-method ] bi ; -M: clickable graft* [ store-labelled-button drop ] [ call-next-method ] bi ; -M: clickable ungraft* [ remove-labelled-button drop ] [ call-next-method ] bi ; +M: clickable ungraft* + [ remove-labelled-button drop ] [ call-next-method ] bi ; : ( model -- table ) [ keys [ ">" swap 2array ] map ] trivial-renderer [ second ] dup table>> - [ second active-buttons get at invoke-primary ] >>action + [ second world-buttons at invoke-primary ] >>action [ hide-glass ] >>hook t >>selection-required? 10 >>min-rows @@ -51,5 +58,5 @@ button-list-popup H{ } set-gestures : show-active-buttons-popup ( tool -- ) - active-buttons get "Active Buttons" + world-buttons "Active Buttons" [ hand-loc get-global point>rect show-glass ] [ request-focus ] bi ; inline