From 6e9b2a6c739f911fc721ab017473b1ab8d785a89 Mon Sep 17 00:00:00 2001
From: Slava Pestov <slava@slava-pestovs-macbook-pro.local>
Date: Wed, 19 Nov 2008 17:47:12 -0600
Subject: [PATCH] Make limited scrollers more versatile: they now have a
 min-dim and a max-dim

---
 basis/ui/gadgets/scrollers/scrollers.factor | 10 ++++++----
 basis/ui/tools/deploy/deploy.factor         |  7 +++++--
 basis/ui/tools/listener/listener.factor     |  4 +++-
 basis/ui/tools/traceback/traceback.factor   |  5 ++++-
 basis/ui/tools/workspace/workspace.factor   | 11 +++++++----
 5 files changed, 25 insertions(+), 12 deletions(-)

diff --git a/basis/ui/gadgets/scrollers/scrollers.factor b/basis/ui/gadgets/scrollers/scrollers.factor
index 6c37c37acf..045ecc7990 100644
--- a/basis/ui/gadgets/scrollers/scrollers.factor
+++ b/basis/ui/gadgets/scrollers/scrollers.factor
@@ -129,10 +129,12 @@ M: scroller focusable-child*
 M: scroller model-changed
     nip f >>follows drop ;
 
-TUPLE: limited-scroller < scroller fixed-dim ;
+TUPLE: limited-scroller < scroller
+{ min-dim initial: { 0 0 } }
+{ max-dim initial: { 1/0. 1/0. } } ;
 
-: <limited-scroller> ( gadget dim -- scroller )
-    >r limited-scroller new-scroller r> >>fixed-dim ;
+: <limited-scroller> ( gadget -- scroller )
+    limited-scroller new-scroller ;
 
 M: limited-scroller pref-dim*
-    fixed-dim>> ;
+    [ call-next-method ] [ min-dim>> vmax ] [ max-dim>> vmin ] tri ;
diff --git a/basis/ui/tools/deploy/deploy.factor b/basis/ui/tools/deploy/deploy.factor
index 0ac89e122f..f310f72780 100644
--- a/basis/ui/tools/deploy/deploy.factor
+++ b/basis/ui/tools/deploy/deploy.factor
@@ -96,9 +96,12 @@ TUPLE: deploy-gadget < pack vocab settings ;
 : com-close ( gadget -- )
     close-window ;
 
+deploy-gadget "misc" "Miscellaneous commands" {
+    { T{ key-down f f "ESC" } com-close }
+} define-command-map
+
 deploy-gadget "toolbar" f {
-    { f com-close }
-    { f com-help }
+    { T{ key-down f f "F1" } com-help }
     { f com-revert }
     { f com-save }
     { T{ key-down f f "RET" } com-deploy }
diff --git a/basis/ui/tools/listener/listener.factor b/basis/ui/tools/listener/listener.factor
index d842bf8a68..49ce5203d3 100644
--- a/basis/ui/tools/listener/listener.factor
+++ b/basis/ui/tools/listener/listener.factor
@@ -25,7 +25,9 @@ TUPLE: listener-gadget < track input output stack ;
 : listener-input, ( listener -- listener )
     dup <listener-input> >>input
     dup input>>
-        { 0 100 } <limited-scroller>
+        <limited-scroller>
+            { 0 100 } >>min-dim
+            { 1/0. 100 } >>max-dim
         "Input" <labelled-gadget>
     f track-add ;
 
diff --git a/basis/ui/tools/traceback/traceback.factor b/basis/ui/tools/traceback/traceback.factor
index 6cb79916e0..7e2158e0e9 100644
--- a/basis/ui/tools/traceback/traceback.factor
+++ b/basis/ui/tools/traceback/traceback.factor
@@ -43,7 +43,10 @@ M: traceback-gadget pref-dim* drop { 550 600 } ;
     <pane-control> ;
 
 : <variables-gadget> ( model -- gadget )
-    <namestack-display> { 400 400 } <limited-scroller> ;
+    <namestack-display>
+    <limited-scroller>
+        { 400 400 } >>min-dim
+        { 400 400 } >>max-dim ;
 
 : variables ( traceback -- )
     model>> <variables-gadget>
diff --git a/basis/ui/tools/workspace/workspace.factor b/basis/ui/tools/workspace/workspace.factor
index bbe4b12712..f06e0aae26 100644
--- a/basis/ui/tools/workspace/workspace.factor
+++ b/basis/ui/tools/workspace/workspace.factor
@@ -47,12 +47,15 @@ M: gadget tool-scroller drop f ;
 : get-tool ( class -- gadget )
     get-workspace find-tool nip ;
 
+: <help-pane> ( topic -- pane )
+    <pane> [ [ help ] with-pane ] keep ;
+
 : help-window ( topic -- )
     [
-        <pane> [ [ help ] with-pane ] keep
-        { 550 700 } <limited-scroller>
-    ] keep
-    article-title open-window ;
+        <help-pane> <limited-scroller>
+            { 550 700 } >>max-dim
+    ] [ article-title ] bi
+    open-window ;
 
 : hide-popup ( workspace -- )
     dup popup>> track-remove