]> gitweb.factorcode.org Git - factor.git/blob - extra/cabal/ui/ui.factor
Initial import
[factor.git] / extra / cabal / ui / ui.factor
1 USING: kernel
2        io
3        io.streams.duplex
4        io.sockets
5        namespaces sequences math math.parser threads quotations splitting
6        ui
7        ui.gadgets 
8        ui.gadgets.panes
9        ui.gadgets.scrollers
10        ui.gadgets.tracks
11        ui.tools.interactor ;
12
13 IN: cabal.ui
14
15 TUPLE: cabal-gadget input output ;
16
17 : <cabal-input> ( -- gadget )
18     gadget get cabal-gadget-output <pane-stream> <interactor> ;
19
20 : <cabal-gadget> ( -- gadget )
21 cabal-gadget construct-empty
22 dup
23 [ <scrolling-pane> over dupd set-cabal-gadget-output <scroller> 5/6 track,
24   <cabal-input>    over dupd set-cabal-gadget-input  <scroller> 1/6 track,
25   drop ]
26 curry
27 { 0 1 }
28 build-track ;
29
30 M: cabal-gadget pref-dim* drop { 550 650 } ;
31
32 : cabal-stream ( cabal -- stream )
33     dup cabal-gadget-input swap cabal-gadget-output <pane-stream>
34     <duplex-stream> ;
35
36 : incoming-loop ( stream -- ) dup stream-readln print incoming-loop ;
37
38 : outgoing-loop ( stream -- )
39 readln over stream-print dup stream-flush outgoing-loop ;
40
41 : cabal-thread ( -- )
42     "cabal://" write readln 
43     ":" split1 string>number <inet> <client> 
44     [ outgoing-loop ] in-thread incoming-loop ;
45
46 : cabal-client ( -- )
47     <cabal-gadget> dup "Cabal Client" open-window
48     cabal-stream [ [ cabal-thread ] with-stream ] in-thread drop ;
49
50 : cabal-client* ( -- ) [ cabal-client ] with-ui ;
51
52 MAIN: cabal-client*