Re-introducing sum and product words, new change-nth and remove-index words, track control replaces and generalizes splitter
parent
e76ba67cbf
commit
d0b79a9419
|
@ -33,6 +33,8 @@
|
||||||
|
|
||||||
+ ui/help:
|
+ ui/help:
|
||||||
|
|
||||||
|
- zooming doesn't work
|
||||||
|
- sort out various round-off issues
|
||||||
- implement handlers for open, quit events, and whatever else
|
- implement handlers for open, quit events, and whatever else
|
||||||
- fix top level window positioning
|
- fix top level window positioning
|
||||||
- changing window titles
|
- changing window titles
|
||||||
|
|
|
@ -186,7 +186,7 @@ vectors words ;
|
||||||
"/library/ui/sliders.factor"
|
"/library/ui/sliders.factor"
|
||||||
"/library/ui/scrolling.factor"
|
"/library/ui/scrolling.factor"
|
||||||
"/library/ui/editors.factor"
|
"/library/ui/editors.factor"
|
||||||
"/library/ui/splitters.factor"
|
"/library/ui/tracks.factor"
|
||||||
"/library/ui/incremental.factor"
|
"/library/ui/incremental.factor"
|
||||||
"/library/ui/paragraphs.factor"
|
"/library/ui/paragraphs.factor"
|
||||||
"/library/ui/panes.factor"
|
"/library/ui/panes.factor"
|
||||||
|
|
|
@ -60,9 +60,13 @@ IN: sequences
|
||||||
: accumulate ( list identity quot -- values | quot: x y -- z )
|
: accumulate ( list identity quot -- values | quot: x y -- z )
|
||||||
rot [ pick >r swap call r> ] map-with nip ; inline
|
rot [ pick >r swap call r> ] map-with nip ; inline
|
||||||
|
|
||||||
|
: change-nth ( seq i quot -- )
|
||||||
|
pick pick >r >r >r swap nth
|
||||||
|
r> call r> r> swap set-nth ; inline
|
||||||
|
|
||||||
: inject ( seq quot -- | quot: elt -- elt )
|
: inject ( seq quot -- | quot: elt -- elt )
|
||||||
over length
|
over length
|
||||||
[ [ swap change-nth-unsafe ] 3keep ] repeat 2drop ;
|
[ [ swap change-nth ] 3keep ] repeat 2drop ;
|
||||||
inline
|
inline
|
||||||
|
|
||||||
: inject-with ( obj seq quot -- | quot: obj elt -- elt )
|
: inject-with ( obj seq quot -- | quot: obj elt -- elt )
|
||||||
|
|
|
@ -43,10 +43,6 @@ M: object set-nth-unsafe set-nth ;
|
||||||
: 2nth-unsafe ( s s n -- x x )
|
: 2nth-unsafe ( s s n -- x x )
|
||||||
tuck swap nth-unsafe >r swap nth-unsafe r> ; inline
|
tuck swap nth-unsafe >r swap nth-unsafe r> ; inline
|
||||||
|
|
||||||
: change-nth-unsafe ( seq i quot -- )
|
|
||||||
pick pick >r >r >r swap nth-unsafe
|
|
||||||
r> call r> r> swap set-nth-unsafe ; inline
|
|
||||||
|
|
||||||
! The f object supports the sequence protocol trivially
|
! The f object supports the sequence protocol trivially
|
||||||
M: f length drop 0 ;
|
M: f length drop 0 ;
|
||||||
M: f nth nip ;
|
M: f nth nip ;
|
||||||
|
|
|
@ -48,6 +48,9 @@ strings vectors ;
|
||||||
tuck >r >r head-slice r> r> tail-slice swapd append3 ;
|
tuck >r >r head-slice r> r> tail-slice swapd append3 ;
|
||||||
flushable
|
flushable
|
||||||
|
|
||||||
|
: remove-index ( n seq -- seq )
|
||||||
|
[ head-slice ] 2keep >r 1+ r> tail-slice append ;
|
||||||
|
|
||||||
: (cut) ( n seq -- before after )
|
: (cut) ( n seq -- before after )
|
||||||
[ head ] 2keep tail-slice ; flushable
|
[ head ] 2keep tail-slice ; flushable
|
||||||
|
|
||||||
|
|
|
@ -153,7 +153,7 @@ SYMBOL: phantom-r
|
||||||
|
|
||||||
: additional-vregs ( seq seq -- n )
|
: additional-vregs ( seq seq -- n )
|
||||||
2array phantoms 2array [ [ length ] map ] 2apply v-
|
2array phantoms 2array [ [ length ] map ] 2apply v-
|
||||||
0 [ 0 max + ] reduce ;
|
[ 0 max ] map sum ;
|
||||||
|
|
||||||
: free-vregs# ( -- int# float# )
|
: free-vregs# ( -- int# float# )
|
||||||
T{ int-regs } free-vregs length
|
T{ int-regs } free-vregs length
|
||||||
|
|
|
@ -24,3 +24,6 @@ USING: arrays generic kernel sequences ;
|
||||||
|
|
||||||
: set-axis ( x y axis -- v )
|
: set-axis ( x y axis -- v )
|
||||||
dup length [ >r zero? pick pick ? r> swap nth ] 2map 2nip ;
|
dup length [ >r zero? pick pick ? r> swap nth ] 2map 2nip ;
|
||||||
|
|
||||||
|
: sum ( seq -- n ) 0 [ + ] reduce ;
|
||||||
|
: product ( seq -- n ) 1 [ * ] reduce ;
|
||||||
|
|
|
@ -210,3 +210,5 @@ unit-test
|
||||||
[ "ihbye" ] [ "hi" <reversed> "bye" append ] unit-test
|
[ "ihbye" ] [ "hi" <reversed> "bye" append ] unit-test
|
||||||
|
|
||||||
[ 10 "hi" "bye" copy-into ] unit-test-fails
|
[ 10 "hi" "bye" copy-into ] unit-test-fails
|
||||||
|
|
||||||
|
[ { 1 2 3 5 6 } ] [ 3 { 1 2 3 4 5 6 } remove-index ] unit-test
|
||||||
|
|
|
@ -80,13 +80,18 @@ TUPLE: pack align fill gap ;
|
||||||
>r >r gadget-orientation r> r> [ pick set-axis ] 2map nip ;
|
>r >r gadget-orientation r> r> [ pick set-axis ] 2map nip ;
|
||||||
|
|
||||||
: packed-dim-2 ( gadget sizes -- list )
|
: packed-dim-2 ( gadget sizes -- list )
|
||||||
[ over rect-dim over v- rot pack-fill v*n v+ ] map-with ;
|
[
|
||||||
|
over rect-dim over v- rot pack-fill v*n v+
|
||||||
|
[ >fixnum ] map
|
||||||
|
] map-with ;
|
||||||
|
|
||||||
: packed-dims ( gadget sizes -- seq )
|
: packed-dims ( gadget sizes -- seq )
|
||||||
2dup packed-dim-2 swap orient ;
|
2dup packed-dim-2 swap orient ;
|
||||||
|
|
||||||
: packed-loc-1 ( gadget sizes -- seq )
|
: packed-loc-1 ( gadget sizes -- seq )
|
||||||
{ 0 0 0 } [ v+ over pack-gap v+ ] accumulate nip ;
|
{ 0 0 0 } [
|
||||||
|
v+ over pack-gap v+ [ >fixnum ] map
|
||||||
|
] accumulate nip ;
|
||||||
|
|
||||||
: packed-loc-2 ( gadget sizes -- seq )
|
: packed-loc-2 ( gadget sizes -- seq )
|
||||||
[
|
[
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
IN: gadgets-listener
|
IN: gadgets-listener
|
||||||
USING: arrays gadgets gadgets-editors gadgets-labels
|
USING: arrays gadgets gadgets-editors gadgets-labels
|
||||||
gadgets-layouts gadgets-panes gadgets-scrolling
|
gadgets-layouts gadgets-panes gadgets-scrolling
|
||||||
gadgets-splitters gadgets-theme generic hashtables io jedit
|
gadgets-theme generic hashtables io jedit
|
||||||
kernel listener math namespaces parser prettyprint
|
kernel listener math namespaces parser prettyprint
|
||||||
sequences styles threads words ;
|
sequences styles threads words ;
|
||||||
|
|
||||||
|
|
|
@ -1,60 +0,0 @@
|
||||||
! Copyright (C) 2005 Slava Pestov.
|
|
||||||
! See http://factor.sf.net/license.txt for BSD license.
|
|
||||||
IN: gadgets-splitters
|
|
||||||
USING: arrays gadgets gadgets-layouts gadgets-theme generic
|
|
||||||
kernel math namespaces sequences styles ;
|
|
||||||
|
|
||||||
TUPLE: divider splitter ;
|
|
||||||
|
|
||||||
: divider-size { 8 8 0 } ;
|
|
||||||
|
|
||||||
M: divider pref-dim* drop divider-size ;
|
|
||||||
|
|
||||||
TUPLE: splitter split ;
|
|
||||||
|
|
||||||
: hand>split ( splitter -- n )
|
|
||||||
drag-loc divider-size 1/2 v*n v+ ;
|
|
||||||
|
|
||||||
: divider-motion ( splitter -- )
|
|
||||||
dup hand>split
|
|
||||||
over rect-dim { 1 1 1 } vmax v/ over gadget-orientation v.
|
|
||||||
0 max 1 min over set-splitter-split relayout-1 ;
|
|
||||||
|
|
||||||
: divider-actions ( thumb -- )
|
|
||||||
dup [ drop ] T{ button-down } set-action
|
|
||||||
dup [ drop ] T{ button-up } set-action
|
|
||||||
[ gadget-parent divider-motion ] T{ drag } set-action ;
|
|
||||||
|
|
||||||
C: divider ( -- divider )
|
|
||||||
dup delegate>gadget
|
|
||||||
dup reverse-video-theme
|
|
||||||
dup divider-actions ;
|
|
||||||
|
|
||||||
C: splitter ( first second split vector -- splitter )
|
|
||||||
[ delegate>pack ] keep
|
|
||||||
[ set-splitter-split ] keep
|
|
||||||
[ >r >r <divider> r> 3array r> add-gadgets ] keep
|
|
||||||
1 over set-pack-fill ;
|
|
||||||
|
|
||||||
: <x-splitter> ( first second split -- splitter )
|
|
||||||
{ 0 1 0 } <splitter> ;
|
|
||||||
|
|
||||||
: <y-splitter> ( first second split -- splitter )
|
|
||||||
{ 1 0 0 } <splitter> ;
|
|
||||||
|
|
||||||
: splitter-part ( splitter -- vec )
|
|
||||||
dup splitter-split swap rect-dim
|
|
||||||
n*v [ >fixnum ] map divider-size 1/2 v*n v- ;
|
|
||||||
|
|
||||||
: splitter-layout ( splitter -- { a b c } )
|
|
||||||
[
|
|
||||||
dup splitter-part ,
|
|
||||||
divider-size ,
|
|
||||||
dup rect-dim divider-size v- swap splitter-part v- ,
|
|
||||||
] { } make ;
|
|
||||||
|
|
||||||
M: splitter layout* ( splitter -- )
|
|
||||||
dup splitter-layout packed-layout ;
|
|
||||||
|
|
||||||
: find-splitter ( gadget -- splitter )
|
|
||||||
[ splitter? ] find-parent ;
|
|
|
@ -0,0 +1,84 @@
|
||||||
|
! Copyright (C) 2006 Slava Pestov.
|
||||||
|
! See http://factorcode.org/license.txt for BSD license.
|
||||||
|
IN: gadgets-tracks
|
||||||
|
USING: gadgets gadgets-layouts gadgets-theme io kernel math
|
||||||
|
namespaces sequences ;
|
||||||
|
|
||||||
|
TUPLE: divider # splitter ;
|
||||||
|
|
||||||
|
: divider-size { 8 8 0 } ;
|
||||||
|
|
||||||
|
M: divider pref-dim* drop divider-size ;
|
||||||
|
|
||||||
|
TUPLE: track sizes saved-sizes ;
|
||||||
|
|
||||||
|
C: track ( orientation -- track )
|
||||||
|
[ delegate>pack ] keep 1 over set-pack-fill ;
|
||||||
|
|
||||||
|
: track-dim ( track -- dim )
|
||||||
|
#! Space available for content (minus dividers)
|
||||||
|
dup rect-dim swap track-sizes length 1-
|
||||||
|
divider-size n*v v- ;
|
||||||
|
|
||||||
|
: track-layout ( track -- sizes )
|
||||||
|
dup track-dim swap track-sizes
|
||||||
|
[ [ over n*v , ] [ divider-size , ] interleave ] { } make
|
||||||
|
nip ;
|
||||||
|
|
||||||
|
M: track layout* ( splitter -- )
|
||||||
|
dup track-layout packed-layout ;
|
||||||
|
|
||||||
|
: divider-delta ( track -- delta )
|
||||||
|
#! How far the divider has moved along the track?
|
||||||
|
drag-loc over track-dim { 1 1 1 } vmax v/
|
||||||
|
swap gadget-orientation v. ;
|
||||||
|
|
||||||
|
: +nth ( delta n seq -- ) swap [ + ] change-nth ;
|
||||||
|
|
||||||
|
: save-sizes ( track -- )
|
||||||
|
dup track-sizes clone swap set-track-saved-sizes ;
|
||||||
|
|
||||||
|
: restore-sizes ( track -- )
|
||||||
|
dup track-saved-sizes clone swap set-track-sizes ;
|
||||||
|
|
||||||
|
: change-divider ( delta n track -- )
|
||||||
|
[
|
||||||
|
dup restore-sizes
|
||||||
|
track-sizes
|
||||||
|
[ +nth ] 3keep
|
||||||
|
>r 1+ >r neg r> r> 2dup length = [ 3drop ] [ +nth ] if
|
||||||
|
] keep relayout-1 ;
|
||||||
|
|
||||||
|
: divider-motion ( divider -- )
|
||||||
|
dup gadget-parent divider-delta
|
||||||
|
over divider-# rot gadget-parent change-divider ;
|
||||||
|
|
||||||
|
: divider-actions ( divider -- )
|
||||||
|
dup [ gadget-parent save-sizes ] T{ button-down } set-action
|
||||||
|
dup [ drop ] T{ button-up } set-action
|
||||||
|
[ divider-motion ] T{ drag } set-action ;
|
||||||
|
|
||||||
|
C: divider ( n -- divider )
|
||||||
|
[ set-divider-# ] keep
|
||||||
|
dup delegate>gadget
|
||||||
|
dup divider-actions
|
||||||
|
dup reverse-video-theme ;
|
||||||
|
|
||||||
|
: normalize-sizes ( sizes -- sizes )
|
||||||
|
dup sum swap [ swap / ] map-with ;
|
||||||
|
|
||||||
|
: track-add-size ( sizes -- sizes )
|
||||||
|
dup length 1 max recip add normalize-sizes ;
|
||||||
|
|
||||||
|
: add-divider ( track -- )
|
||||||
|
dup track-sizes length dup zero?
|
||||||
|
[ 2drop ] [ 1- <divider> swap add-gadget ] if ;
|
||||||
|
|
||||||
|
: track-add ( gadget track -- )
|
||||||
|
dup add-divider [ add-gadget ] keep
|
||||||
|
dup track-sizes track-add-size swap set-track-sizes ;
|
||||||
|
|
||||||
|
: track-remove ( gadget track -- )
|
||||||
|
! wrong
|
||||||
|
[ gadget-children index ] 2keep swap unparent
|
||||||
|
[ remove-index ] keep set-track-sizes ;
|
Loading…
Reference in New Issue