- slider needs to be modelized
- some way of intercepting all gestures
- better help result ranking
-- track add/remove weirdness
- minibuffer should show a title
+ ui:
<pile> <incremental> over add-output
dup prepare-line ;
+! Panes are streams.
+
+: scroll-pane ( pane -- )
+ dup pane-scrolls? [ scroll>bottom ] [ drop ] if ;
+
+TUPLE: pane-stream pane ;
+
: prepare-print ( current -- gadget )
#! Optimization: if line has 1 child, add the child.
dup gadget-children {
{ [ t ] [ drop ] }
} cond ;
+: pane-terpri ( pane -- )
+ dup pane-current dup unparent prepare-print
+ over pane-output add-incremental
+ prepare-line ;
+
: pane-write ( pane seq -- )
[ over pane-current stream-write ]
- [ dup stream-terpri ] interleave drop ;
+ [ dup pane-terpri ] interleave drop ;
: pane-format ( style pane seq -- )
[ pick pick pane-current stream-format ]
- [ dup stream-terpri ] interleave 2drop ;
-
-! Panes are streams.
-
-: scroll-pane ( pane -- )
- dup pane-scrolls? [ scroll>bottom ] [ drop ] if ;
-
-TUPLE: pane-stream pane ;
+ [ dup pane-terpri ] interleave 2drop ;
: do-pane-stream ( pane-stream quot -- )
>r pane-stream-pane r> over slip scroll-pane ; inline
M: pane-stream stream-terpri
- [
- dup pane-current dup unparent prepare-print
- over pane-output add-incremental
- prepare-line
- ] do-pane-stream ;
+ [ pane-terpri ] do-pane-stream ;
M: pane-stream stream-write1
[ pane-current stream-write1 ] do-pane-stream ;
dup add-divider [ add-gadget ] keep
dup track-sizes track-add-size swap set-track-sizes ;
+: remove-divider ( n track -- )
+ 2dup gadget-children length = [ >r 1- r> ] when
+ nth-gadget unparent ;
+
+: track-remove-size ( n track -- )
+ [ >r 2 /i r> track-sizes remove-nth normalize-sizes ] keep
+ set-track-sizes ;
+
: track-remove@ ( n track -- )
- #! Remove the divider if this is not the last child.
2dup nth-gadget unparent
- dup gadget-children empty? [
- 2dup gadget-children length = [ >r 1- r> ] when
- 2dup nth-gadget unparent
- ] unless
- [ >r 2 /i r> track-sizes remove-nth normalize-sizes ] keep
- [ set-track-sizes ] keep relayout-1 ;
+ dup gadget-children empty? [ 2dup remove-divider ] unless
+ [ track-remove-size ] keep
+ relayout-1 ;
: track-remove ( gadget track -- )
[ gadget-children index ] keep track-remove@ ;
"test/commands.factor"
"test/panes.factor"
"test/editor.factor"
+ "test/tracks.factor"
} ;
--- /dev/null
+IN: temporary
+USING: gadgets-tracks gadgets test kernel namespaces math
+sequences ;
+
+[ { 1/3 1/2 1/6 } ] [
+ { 1/3 1/2 1/6 } track-add-size 1 head* normalize-sizes
+] unit-test
+
+{
+ {
+ [ <gadget> { 100 200 } over set-rect-dim ]
+ f
+ f
+ 1/2
+ }
+ {
+ [ <gadget> { 100 100 } over set-rect-dim ]
+ f
+ f
+ 1/4
+ }
+ {
+ [ <gadget> { 100 100 } over set-rect-dim ]
+ f
+ f
+ 1/4
+ }
+} { 0 1 } make-track "track" set
+
+"track" get dup prefer layout
+
+[ { 100 416 } ] [ "track" get rect-dim ] unit-test
+
+[ V{ { 100 200 } { 100 8 } { 100 100 } { 100 8 } { 100 100 } } ]
+[ "track" get gadget-children [ rect-dim ] map ] unit-test
+
+[ { 1/2 1/4 1/4 } ] [ "track" get track-sizes ] unit-test
+
+<gadget> { 70 70 } over set-rect-dim "track" get track-add
+"track" get layout
+[ { 3/8 3/16 3/16 1/4 } ] [ "track" get track-sizes ] unit-test
+
+"track" get [ gadget-children length 1- ] keep track-remove@
+"track" get layout
+[ { 1/2 1/4 1/4 } ] [ "track" get track-sizes ] unit-test
+
+[ V{ { 100 200 } { 100 8 } { 100 100 } { 100 8 } { 100 100 } } ]
+[ "track" get gadget-children [ rect-dim ] map ] unit-test
: clear-browser ( browser -- )
browser-definitions close-definitions ;
-browser "Browser commands" {
+browser "Toolbar" {
{ "Clear" T{ key-down f f "CLEAR" } [ clear-browser ] }
} define-commands
! The UI tool
TUPLE: dataflow-gadget history search ;
-dataflow-gadget "History commands" {
+dataflow-gadget "Toolbar" {
{ "Back" T{ key-down f { C+ } "b" } [ dataflow-gadget-history go-back ] }
{ "Forward" T{ key-down f { C+ } "f" } [ dataflow-gadget-history go-forward ] }
} define-commands
: help-action ( help-gadget -- link )
help-gadget-history model-value >link ;
-help-gadget "History commands" {
+help-gadget "Toolbar" {
{ "Back" T{ key-down f { C+ } "b" } [ help-gadget-history go-back ] }
{ "Forward" T{ key-down f { C+ } "f" } [ help-gadget-history go-forward ] }
{ "Home" T{ key-down f { C+ } "h" } [ go-home ] }
-} define-commands
+}
+link class-operations [ help-action ] modify-operations
+[ command-name "Follow" = not ] subset
+append
+define-commands
[ [ hash-values [ dup set ] each ] each ] make-hash
hash-values natural-sort ;
-listener-gadget "Listener commands" {
+listener-gadget "Toolbar" {
{ "Restart" T{ key-down f { C+ } "r" } [ start-listener ] }
- { "Send EOF" T{ key-down f { C+ } "d" } [ listener-eof ] }
{
"History"
T{ key-down f { C+ } "h" }
T{ key-down f { C+ } "CLEAR" }
[ clear-listener-stack ]
}
+ { "Send EOF" T{ key-down f { C+ } "d" } [ listener-eof ] }
+} define-commands
+
+listener-gadget "Listener commands" {
{
"Complete word (used vocabs)"
T{ key-down f f "TAB" }
! See http://factorcode.org/license.txt for BSD license.
USING: compiler kernel gadgets-tracks gadgets-scrolling
gadgets-workspace gadgets-panes gadgets-presentations
-gadgets-buttons inference errors io math gadgets namespaces ;
+gadgets-buttons inference errors io math gadgets namespaces
+generic ;
IN: gadgets-messages
TUPLE: messages counter errors errors# warnings warnings# ;
: messages-warnings+
dup messages-warnings# 1+ swap set-messages-warnings# ;
+M: object inference-error-major? drop t ;
+
M: messages compile-error
- over inference-error?
- [ over inference-error-major? ]
- [ t ] if
+ over inference-error-major?
[ dup messages-errors+ messages-errors ]
[ dup messages-warnings+ messages-warnings ] if
- [ error. ] with-stream ;
+ <pane-stream> [ error. ] with-stream ;
: <messages-button> ( -- gadget )
"Compiler messages"
quotation class-operations
[ quot-action ] modify-listener-operations
define-commands
-
-! Help commands
-help-gadget "Link commands"
-link class-operations [ help-action ] modify-operations
-[ command-name "Follow" = not ] subset
-define-commands
dup [ step-all ] walker-command reset-walker
find-workspace listener-gadget select-tool ;
-walker-gadget "Walker commands" {
+walker-gadget "Toolbar" {
{ "Step" T{ key-down f f "s" } [ walker-step ] }
{ "Step in" T{ key-down f f "i" } [ walker-step-in ] }
{ "Step out" T{ key-down f f "o" } [ walker-step-out ] }
windows get [ empty? not ] [ f ] if* ;
: <toolbar> ( target classes -- toolbar )
- [ [ commands hash-values [ % ] each ] each ] { } make
+ [ commands "Toolbar" swap hash ] map concat
[ <command-presentation> ] map-with
make-shelf ;