Search gadget improvements
parent
a5ed889085
commit
48a3fad1a1
|
@ -1,7 +1,6 @@
|
||||||
- auto-invoke code gc
|
- auto-invoke code gc
|
||||||
- fix alien-callback/SEH bug on win32
|
- fix alien-callback/SEH bug on win32
|
||||||
- list mouse gestures
|
- list mouse gestures
|
||||||
- search gadget should use list
|
|
||||||
- maybe simplify list into displaying list a sequence of strings
|
- maybe simplify list into displaying list a sequence of strings
|
||||||
- the mouse button overload sucks, use popup menus instead
|
- the mouse button overload sucks, use popup menus instead
|
||||||
- nested presentation mouse over is not right
|
- nested presentation mouse over is not right
|
||||||
|
@ -12,10 +11,8 @@
|
||||||
- better help result ranking
|
- better help result ranking
|
||||||
- minibuffer should show a title
|
- minibuffer should show a title
|
||||||
- browser: toolbar is missing
|
- browser: toolbar is missing
|
||||||
- new search gadget:
|
|
||||||
- field does not move caret properly
|
|
||||||
- use it instead of the old search gadget
|
|
||||||
- listener: 'edit a file' feature
|
- listener: 'edit a file' feature
|
||||||
|
- viewport sizing issue
|
||||||
|
|
||||||
+ ui:
|
+ ui:
|
||||||
|
|
||||||
|
|
|
@ -135,11 +135,14 @@ M: f print-element drop ;
|
||||||
! Some links
|
! Some links
|
||||||
: >link ( obj -- obj ) dup link? [ <link> ] unless ;
|
: >link ( obj -- obj ) dup link? [ <link> ] unless ;
|
||||||
|
|
||||||
: $link ( element -- )
|
: ($link) ( article -- )
|
||||||
first link-style [
|
link-style [
|
||||||
dup article-title swap >link write-object
|
dup article-title swap >link write-object
|
||||||
] with-style ;
|
] with-style ;
|
||||||
|
|
||||||
|
: $link ( element -- )
|
||||||
|
first ($link) ;
|
||||||
|
|
||||||
: $vocab-link ( element -- )
|
: $vocab-link ( element -- )
|
||||||
first link-style [
|
first link-style [
|
||||||
dup <vocab-link> write-object
|
dup <vocab-link> write-object
|
||||||
|
|
|
@ -107,7 +107,7 @@ TUPLE: bad-escape ;
|
||||||
global [
|
global [
|
||||||
{
|
{
|
||||||
"scratchpad" "syntax" "arrays" "compiler" "definitions"
|
"scratchpad" "syntax" "arrays" "compiler" "definitions"
|
||||||
"errors" "generic" "hashtables" "help" "inference"
|
"errors" "generic" "hashtables" "inference"
|
||||||
"io" "kernel" "listener" "math"
|
"io" "kernel" "listener" "math"
|
||||||
"memory" "modules" "namespaces" "parser" "prettyprint"
|
"memory" "modules" "namespaces" "parser" "prettyprint"
|
||||||
"sequences" "shells" "strings" "styles" "test"
|
"sequences" "shells" "strings" "styles" "test"
|
||||||
|
|
|
@ -33,15 +33,14 @@ PROVIDE: library/ui {
|
||||||
"text/elements.factor"
|
"text/elements.factor"
|
||||||
"text/editor.factor"
|
"text/editor.factor"
|
||||||
"text/commands.factor"
|
"text/commands.factor"
|
||||||
"text/field.factor"
|
|
||||||
"text/interactor.factor"
|
"text/interactor.factor"
|
||||||
"gadgets/presentations.factor"
|
"gadgets/presentations.factor"
|
||||||
"ui.factor"
|
"ui.factor"
|
||||||
"tools/tools.factor"
|
"tools/tools.factor"
|
||||||
|
"tools/search.factor"
|
||||||
"tools/messages.factor"
|
"tools/messages.factor"
|
||||||
"tools/listener.factor"
|
"tools/listener.factor"
|
||||||
"tools/walker.factor"
|
"tools/walker.factor"
|
||||||
"tools/search.factor"
|
|
||||||
"tools/browser.factor"
|
"tools/browser.factor"
|
||||||
"tools/help.factor"
|
"tools/help.factor"
|
||||||
"tools/dataflow.factor"
|
"tools/dataflow.factor"
|
||||||
|
@ -52,7 +51,6 @@ PROVIDE: library/ui {
|
||||||
"test/models.factor"
|
"test/models.factor"
|
||||||
"test/document.factor"
|
"test/document.factor"
|
||||||
"test/rectangles.factor"
|
"test/rectangles.factor"
|
||||||
"test/fields.factor"
|
|
||||||
"test/commands.factor"
|
"test/commands.factor"
|
||||||
"test/panes.factor"
|
"test/panes.factor"
|
||||||
"test/editor.factor"
|
"test/editor.factor"
|
||||||
|
|
|
@ -1,7 +0,0 @@
|
||||||
IN: temporary
|
|
||||||
USING: gadgets-text kernel models namespaces test ;
|
|
||||||
|
|
||||||
[ ] [ f <model> dup "model" set <field> "field" set ] unit-test
|
|
||||||
[ ] [ "Hello world" "field" get set-editor-text ] unit-test
|
|
||||||
[ "Hello world" ] [ "field" get field-commit ] unit-test
|
|
||||||
[ "Hello world" ] [ "model" get model-value ] unit-test
|
|
|
@ -123,7 +123,8 @@ M: editor model-changed
|
||||||
] when drop ;
|
] when drop ;
|
||||||
|
|
||||||
M: loc-monitor model-changed
|
M: loc-monitor model-changed
|
||||||
loc-monitor-editor control-self scroll>caret ;
|
loc-monitor-editor control-self
|
||||||
|
dup relayout-1 scroll>caret ;
|
||||||
|
|
||||||
: draw-caret ( -- )
|
: draw-caret ( -- )
|
||||||
editor get editor-focused? [
|
editor get editor-focused? [
|
||||||
|
|
|
@ -1,21 +0,0 @@
|
||||||
! Copyright (C) 2006 Slava Pestov
|
|
||||||
! See http://factorcode.org/license.txt for BSD license.
|
|
||||||
IN: gadgets-text
|
|
||||||
USING: gadgets generic kernel models sequences gadgets-theme ;
|
|
||||||
|
|
||||||
TUPLE: field model ;
|
|
||||||
|
|
||||||
C: field ( model -- field )
|
|
||||||
<editor> over set-delegate
|
|
||||||
[ set-field-model ] keep
|
|
||||||
dup dup set-control-self ;
|
|
||||||
|
|
||||||
: field-commit ( field -- string )
|
|
||||||
[ editor-text ] keep
|
|
||||||
[ field-model [ dupd set-model ] when* ] keep
|
|
||||||
select-all ;
|
|
||||||
|
|
||||||
field "Field commands" {
|
|
||||||
{ "Clear input" T{ key-down f { C+ } "k" } [ control-model clear-doc ] }
|
|
||||||
{ "Accept input" T{ key-down f f "RETURN" } [ field-commit drop ] }
|
|
||||||
} define-commands
|
|
|
@ -60,4 +60,5 @@ M: interactor stream-readln
|
||||||
|
|
||||||
interactor "Interactor commands" {
|
interactor "Interactor commands" {
|
||||||
{ "Evaluate" T{ key-down f f "RETURN" } [ interactor-commit ] }
|
{ "Evaluate" T{ key-down f f "RETURN" } [ interactor-commit ] }
|
||||||
|
{ "Clear input" T{ key-down f { C+ } "k" } [ control-model clear-doc ] }
|
||||||
} define-commands
|
} define-commands
|
||||||
|
|
|
@ -45,7 +45,7 @@ TUPLE: tile definition gadget ;
|
||||||
<default-border> dup faint-boundary ;
|
<default-border> dup faint-boundary ;
|
||||||
|
|
||||||
C: tile ( definition -- gadget )
|
C: tile ( definition -- gadget )
|
||||||
2dup { tile } <toolbar>
|
2dup { tile } "Word commands" <toolbar>
|
||||||
<tile-content> over set-gadget-delegate
|
<tile-content> over set-gadget-delegate
|
||||||
[ set-tile-definition ] keep ;
|
[ set-tile-definition ] keep ;
|
||||||
|
|
||||||
|
@ -87,9 +87,24 @@ C: navigator ( -- gadget )
|
||||||
|
|
||||||
C: browser ( -- gadget )
|
C: browser ( -- gadget )
|
||||||
{
|
{
|
||||||
{ [ <navigator> ] set-browser-navigator f 1/5 }
|
{
|
||||||
{ [ <definitions> ] set-browser-definitions [ <scroller> ] 3/5 }
|
[ <navigator> ]
|
||||||
{ [ [ apropos ] <search-gadget> ] set-browser-search f 1/5 }
|
set-browser-navigator
|
||||||
|
f
|
||||||
|
1/5
|
||||||
|
}
|
||||||
|
{
|
||||||
|
[ <definitions> ]
|
||||||
|
set-browser-definitions
|
||||||
|
[ <scroller> ]
|
||||||
|
3/5
|
||||||
|
}
|
||||||
|
{
|
||||||
|
[ "" [ browser call-tool ] <word-search> ]
|
||||||
|
set-browser-search
|
||||||
|
f
|
||||||
|
1/5
|
||||||
|
}
|
||||||
} { 0 1 } make-track* ;
|
} { 0 1 } make-track* ;
|
||||||
|
|
||||||
M: browser focusable-child* browser-search ;
|
M: browser focusable-child* browser-search ;
|
||||||
|
|
|
@ -22,8 +22,18 @@ TUPLE: help-gadget pane history search ;
|
||||||
|
|
||||||
C: help-gadget ( -- gadget )
|
C: help-gadget ( -- gadget )
|
||||||
dup init-history {
|
dup init-history {
|
||||||
{ [ <help-pane> ] set-help-gadget-pane [ <scroller> ] 4/5 }
|
{
|
||||||
{ [ [ search-help. ] <search-gadget> ] set-help-gadget-search f 1/5 }
|
[ <help-pane> ]
|
||||||
|
set-help-gadget-pane
|
||||||
|
[ <scroller> ]
|
||||||
|
4/5
|
||||||
|
}
|
||||||
|
{
|
||||||
|
[ "" [ help-gadget call-tool ] <help-search> ]
|
||||||
|
set-help-gadget-search
|
||||||
|
f
|
||||||
|
1/5
|
||||||
|
}
|
||||||
} { 0 1 } make-track* ;
|
} { 0 1 } make-track* ;
|
||||||
|
|
||||||
M: help-gadget focusable-child* help-gadget-search ;
|
M: help-gadget focusable-child* help-gadget-search ;
|
||||||
|
|
|
@ -128,7 +128,7 @@ M: listener-gadget tool-help
|
||||||
|
|
||||||
: insert-completion ( completion -- )
|
: insert-completion ( completion -- )
|
||||||
find-listener [
|
find-listener [
|
||||||
>r peek word-name r> listener-gadget-input user-input
|
>r word-name r> listener-gadget-input user-input
|
||||||
] keep hide-minibuffer ;
|
] keep hide-minibuffer ;
|
||||||
|
|
||||||
listener-gadget "Toolbar" {
|
listener-gadget "Toolbar" {
|
||||||
|
|
|
@ -6,39 +6,12 @@ gadgets-panes gadgets-scrolling gadgets-text gadgets-theme
|
||||||
generic help tools kernel models sequences words
|
generic help tools kernel models sequences words
|
||||||
gadgets-borders gadgets-lists namespaces ;
|
gadgets-borders gadgets-lists namespaces ;
|
||||||
|
|
||||||
TUPLE: search-gadget input ;
|
|
||||||
|
|
||||||
: <search-pane> ( model quot -- )
|
|
||||||
[ over empty? [ 2drop ] [ call ] if ] curry
|
|
||||||
<pane-control> ;
|
|
||||||
|
|
||||||
: <search-bar> ( field -- gadget )
|
|
||||||
{
|
|
||||||
{ [ "Search: " <label> ] f f @left }
|
|
||||||
{ f f f @center }
|
|
||||||
} make-frame ;
|
|
||||||
|
|
||||||
C: search-gadget ( quot -- )
|
|
||||||
>r f <model> dup r> {
|
|
||||||
{ [ <field> ] set-search-gadget-input [ <search-bar> ] @top }
|
|
||||||
{ [ swap <search-pane> <scroller> ] f f @center }
|
|
||||||
} make-frame* ;
|
|
||||||
|
|
||||||
M: search-gadget focusable-child* search-gadget-input ;
|
|
||||||
|
|
||||||
|
|
||||||
! Here is the new one
|
|
||||||
TUPLE: live-search field list model producer action presenter ;
|
TUPLE: live-search field list model producer action presenter ;
|
||||||
|
|
||||||
: find-live-search [ live-search? ] find-parent ;
|
: find-live-search [ live-search? ] find-parent ;
|
||||||
|
|
||||||
: find-search-list find-live-search live-search-list ;
|
: find-search-list find-live-search live-search-list ;
|
||||||
|
|
||||||
: update-live-search ( live-search -- )
|
|
||||||
dup live-search-field editor-text
|
|
||||||
over live-search-producer call
|
|
||||||
swap live-search-model set-model ;
|
|
||||||
|
|
||||||
TUPLE: search-field ;
|
TUPLE: search-field ;
|
||||||
|
|
||||||
C: search-field ( string -- gadget )
|
C: search-field ( string -- gadget )
|
||||||
|
@ -46,18 +19,19 @@ C: search-field ( string -- gadget )
|
||||||
dup dup set-control-self
|
dup dup set-control-self
|
||||||
[ set-editor-text ] keep ;
|
[ set-editor-text ] keep ;
|
||||||
|
|
||||||
M: search-field model-changed
|
|
||||||
dup find-live-search update-live-search
|
|
||||||
delegate model-changed ;
|
|
||||||
|
|
||||||
search-field H{
|
search-field H{
|
||||||
{ T{ key-down f f "UP" } [ find-search-list select-prev ] }
|
{ T{ key-down f f "UP" } [ find-search-list select-prev ] }
|
||||||
{ T{ key-down f f "DOWN" } [ find-search-list select-next ] }
|
{ T{ key-down f f "DOWN" } [ find-search-list select-next ] }
|
||||||
{ T{ key-down f f "RETURN" } [ find-search-list call-action ] }
|
{ T{ key-down f f "RETURN" } [ find-search-list call-action ] }
|
||||||
} set-gestures
|
} set-gestures
|
||||||
|
|
||||||
|
: <search-model> ( -- model )
|
||||||
|
gadget get dup live-search-field control-model
|
||||||
|
swap live-search-producer [ "\n" join ] swap append
|
||||||
|
<filter> ;
|
||||||
|
|
||||||
: <search-list>
|
: <search-list>
|
||||||
gadget get live-search-model
|
<search-model>
|
||||||
gadget get live-search-presenter
|
gadget get live-search-presenter
|
||||||
gadget get live-search-action
|
gadget get live-search-action
|
||||||
<list> ;
|
<list> ;
|
||||||
|
@ -66,7 +40,6 @@ C: live-search ( string action producer presenter -- gadget )
|
||||||
[ set-live-search-presenter ] keep
|
[ set-live-search-presenter ] keep
|
||||||
[ set-live-search-producer ] keep
|
[ set-live-search-producer ] keep
|
||||||
[ set-live-search-action ] keep
|
[ set-live-search-action ] keep
|
||||||
f <model> over set-live-search-model
|
|
||||||
{
|
{
|
||||||
{
|
{
|
||||||
[ <search-field> ]
|
[ <search-field> ]
|
||||||
|
@ -90,3 +63,9 @@ M: live-search focusable-child* live-search-field ;
|
||||||
[ completions ] curry
|
[ completions ] curry
|
||||||
[ [ completion. ] make-pane ]
|
[ [ completion. ] make-pane ]
|
||||||
<live-search> ;
|
<live-search> ;
|
||||||
|
|
||||||
|
: <help-search> ( string action -- gadget )
|
||||||
|
\ first add*
|
||||||
|
[ search-help ]
|
||||||
|
[ [ ($link) ] make-pane ]
|
||||||
|
<live-search> ;
|
||||||
|
|
|
@ -11,8 +11,18 @@ gadgets-scrolling gadgets-panes gadgets-messages ;
|
||||||
|
|
||||||
C: tool ( gadget -- tool )
|
C: tool ( gadget -- tool )
|
||||||
{
|
{
|
||||||
{ [ dup dup class tool 2array <toolbar> ] f f @top }
|
{
|
||||||
{ [ ] set-tool-gadget f @center }
|
[ dup dup class tool 2array "Toolbar" <toolbar> ]
|
||||||
|
f
|
||||||
|
f
|
||||||
|
@top
|
||||||
|
}
|
||||||
|
{
|
||||||
|
f
|
||||||
|
set-tool-gadget
|
||||||
|
f
|
||||||
|
@center
|
||||||
|
}
|
||||||
} make-frame* ;
|
} make-frame* ;
|
||||||
|
|
||||||
M: tool focusable-child* tool-gadget ;
|
M: tool focusable-child* tool-gadget ;
|
||||||
|
|
|
@ -119,8 +119,9 @@ C: titled-gadget ( gadget title -- )
|
||||||
: restore-windows? ( -- ? )
|
: restore-windows? ( -- ? )
|
||||||
windows get [ empty? not ] [ f ] if* ;
|
windows get [ empty? not ] [ f ] if* ;
|
||||||
|
|
||||||
: <toolbar> ( target classes -- toolbar )
|
: <toolbar> ( target classes group -- toolbar )
|
||||||
[ commands "Toolbar" swap hash ] map concat
|
swap
|
||||||
|
[ commands hash ] map-with concat
|
||||||
[ <command-presentation> ] map-with
|
[ <command-presentation> ] map-with
|
||||||
make-shelf ;
|
make-shelf ;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue