Browser tool now saves scroll bar position in history
							parent
							
								
									78013c2bdf
								
							
						
					
					
						commit
						88bbb47bfa
					
				| 
						 | 
					@ -1,23 +1,33 @@
 | 
				
			||||||
! Copyright (C) 2006, 2009 Slava Pestov.
 | 
					! Copyright (C) 2006, 2009 Slava Pestov.
 | 
				
			||||||
! See http://factorcode.org/license.txt for BSD license.
 | 
					! See http://factorcode.org/license.txt for BSD license.
 | 
				
			||||||
USING: debugger help help.topics help.crossref help.home kernel
 | 
					USING: debugger help help.topics help.crossref help.home kernel models
 | 
				
			||||||
models compiler.units assocs words vocabs accessors fry
 | 
					compiler.units assocs words vocabs accessors fry arrays
 | 
				
			||||||
combinators.short-circuit namespaces sequences models
 | 
					combinators.short-circuit namespaces sequences models help.apropos
 | 
				
			||||||
models.history help.apropos combinators ui.commands ui.gadgets
 | 
					combinators ui ui.commands ui.gadgets ui.gadgets.panes
 | 
				
			||||||
ui.gadgets.panes ui.gadgets.scrollers ui.gadgets.tracks
 | 
					ui.gadgets.scrollers ui.gadgets.tracks ui.gestures ui.gadgets.buttons
 | 
				
			||||||
ui.gestures ui.gadgets.buttons ui.gadgets.packs
 | 
					ui.gadgets.packs ui.gadgets.editors ui.gadgets.labels
 | 
				
			||||||
ui.gadgets.editors ui.gadgets.labels ui.gadgets.status-bar
 | 
					ui.gadgets.status-bar ui.gadgets.glass ui.gadgets.borders ui.gadgets.viewports
 | 
				
			||||||
ui.gadgets.glass ui.gadgets.borders ui.tools.common
 | 
					ui.tools.common ui.tools.browser.popups ui.tools.browser.history ;
 | 
				
			||||||
ui.tools.browser.popups ui ;
 | 
					 | 
				
			||||||
IN: ui.tools.browser
 | 
					IN: ui.tools.browser
 | 
				
			||||||
 | 
					
 | 
				
			||||||
TUPLE: browser-gadget < tool pane scroller search-field popup ;
 | 
					TUPLE: browser-gadget < tool history pane scroller search-field popup ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
{ 650 400 } browser-gadget set-tool-dim
 | 
					{ 650 400 } browser-gadget set-tool-dim
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					M: browser-gadget history-value
 | 
				
			||||||
 | 
					    [ control-value ] [ scroller>> scroll-position ]
 | 
				
			||||||
 | 
					    bi 2array ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					M: browser-gadget set-history-value
 | 
				
			||||||
 | 
					    [ first2 ] dip
 | 
				
			||||||
 | 
					    [ set-control-value ] [ scroller>> set-scroll-position ]
 | 
				
			||||||
 | 
					    bi-curry bi* ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: show-help ( link browser-gadget -- )
 | 
					: show-help ( link browser-gadget -- )
 | 
				
			||||||
    [ >link ] [ model>> ] bi*
 | 
					    [ >link ] dip
 | 
				
			||||||
    [ [ add-recent ] [ add-history ] bi* ] [ set-model ] 2bi ;
 | 
					    [ [ add-recent ] [ history>> add-history ] bi* ]
 | 
				
			||||||
 | 
					    [ model>> set-model ]
 | 
				
			||||||
 | 
					    2bi ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: <help-pane> ( browser-gadget -- gadget )
 | 
					: <help-pane> ( browser-gadget -- gadget )
 | 
				
			||||||
    model>> [ '[ _ print-topic ] try ] <pane-control> ;
 | 
					    model>> [ '[ _ print-topic ] try ] <pane-control> ;
 | 
				
			||||||
| 
						 | 
					@ -41,7 +51,8 @@ TUPLE: browser-gadget < tool pane scroller search-field popup ;
 | 
				
			||||||
: <browser-gadget> ( link -- gadget )
 | 
					: <browser-gadget> ( link -- gadget )
 | 
				
			||||||
    vertical browser-gadget new-track
 | 
					    vertical browser-gadget new-track
 | 
				
			||||||
        1 >>fill
 | 
					        1 >>fill
 | 
				
			||||||
        swap >link <history> >>model
 | 
					        swap >link <model> >>model
 | 
				
			||||||
 | 
					        dup <history> >>history
 | 
				
			||||||
        dup <search-field> >>search-field
 | 
					        dup <search-field> >>search-field
 | 
				
			||||||
        dup <browser-toolbar> { 3 3 } <border> { 1 0 } >>fill f track-add
 | 
					        dup <browser-toolbar> { 3 3 } <border> { 1 0 } >>fill f track-add
 | 
				
			||||||
        dup <help-pane> >>pane
 | 
					        dup <help-pane> >>pane
 | 
				
			||||||
| 
						 | 
					@ -93,9 +104,9 @@ M: browser-gadget focusable-child* search-field>> ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
\ show-browser H{ { +nullary+ t } } define-command
 | 
					\ show-browser H{ { +nullary+ t } } define-command
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: com-back ( browser -- ) model>> go-back ;
 | 
					: com-back ( browser -- ) history>> go-back ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: com-forward ( browser -- ) model>> go-forward ;
 | 
					: com-forward ( browser -- ) history>> go-forward ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
: com-home ( browser -- ) "help.home" swap show-help ;
 | 
					: com-home ( browser -- ) "help.home" swap show-help ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1 @@
 | 
				
			||||||
 | 
					Slava Pestov
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,36 @@
 | 
				
			||||||
 | 
					USING: namespaces ui.tools.browser.history sequences tools.test ;
 | 
				
			||||||
 | 
					IN: ui.tools.browser.history.tests
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					f <history> "history" set
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"history" get add-history
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[ t ] [ "history" get back>> empty? ] unit-test
 | 
				
			||||||
 | 
					[ t ] [ "history" get forward>> empty? ] unit-test
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"history" get add-history
 | 
				
			||||||
 | 
					"history" get 3 >>value drop
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[ t ] [ "history" get back>> empty? ] unit-test
 | 
				
			||||||
 | 
					[ t ] [ "history" get forward>> empty? ] unit-test
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"history" get add-history
 | 
				
			||||||
 | 
					"history" get 4 >>value drop
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[ f ] [ "history" get back>> empty? ] unit-test
 | 
				
			||||||
 | 
					[ t ] [ "history" get forward>> empty? ] unit-test
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"history" get go-back
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[ 3 ] [ "history" get value>> ] unit-test
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[ t ] [ "history" get back>> empty? ] unit-test
 | 
				
			||||||
 | 
					[ f ] [ "history" get forward>> empty? ] unit-test
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					"history" get go-forward
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[ 4 ] [ "history" get value>> ] unit-test
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[ f ] [ "history" get back>> empty? ] unit-test
 | 
				
			||||||
 | 
					[ t ] [ "history" get forward>> empty? ] unit-test
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,32 @@
 | 
				
			||||||
 | 
					! Copyright (C) 2009 Slava Pestov.
 | 
				
			||||||
 | 
					! See http://factorcode.org/license.txt for BSD license.
 | 
				
			||||||
 | 
					USING: kernel accessors sequences locals ;
 | 
				
			||||||
 | 
					IN: ui.tools.browser.history
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					TUPLE: history owner back forward ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					: <history> ( owner -- history )
 | 
				
			||||||
 | 
					    V{ } clone V{ } clone history boa ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					GENERIC: history-value ( object -- value )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					GENERIC: set-history-value ( value object -- )
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					: (add-history) ( history to -- )
 | 
				
			||||||
 | 
					    swap owner>> history-value dup [ swap push ] [ 2drop ] if ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					:: go-back/forward ( history to from -- )
 | 
				
			||||||
 | 
					    from empty? [
 | 
				
			||||||
 | 
					        history to (add-history)
 | 
				
			||||||
 | 
					        from pop history owner>> set-history-value
 | 
				
			||||||
 | 
					    ] unless ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					: go-back ( history -- )
 | 
				
			||||||
 | 
					    dup [ forward>> ] [ back>> ] bi go-back/forward ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					: go-forward ( history -- )
 | 
				
			||||||
 | 
					    dup [ back>> ] [ forward>> ] bi go-back/forward ;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					: add-history ( history -- )
 | 
				
			||||||
 | 
					    dup forward>> delete-all
 | 
				
			||||||
 | 
					    dup back>> (add-history) ;
 | 
				
			||||||
		Loading…
	
		Reference in New Issue