]> gitweb.factorcode.org Git - factor.git/commitdiff
ui.tools.button-list: per-world popup
authorJohn Benediktsson <mrjbq7@gmail.com>
Tue, 25 Jan 2022 21:59:24 +0000 (13:59 -0800)
committerJohn Benediktsson <mrjbq7@gmail.com>
Tue, 25 Jan 2022 21:59:24 +0000 (13:59 -0800)
basis/ui/tools/button-list/button-list.factor

index b0029e5b749ab2fb76d09cb1ffb4937f2a9a49c1..87678d758e23c86e90f32dfd1adc1d2062d19bed 100644 (file)
@@ -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 ;
 
 : <active-buttons-table> ( model -- table )
     [ keys [ ">" swap 2array ] map ] <arrow> trivial-renderer [ second ] <search-table> 
     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 <model> "Active Buttons" <active-buttons-popup>
+    world-buttons <model> "Active Buttons" <active-buttons-popup>
     [ hand-loc get-global point>rect show-glass ] [ request-focus ] bi ; inline