sequences strings hashtables splitting fry assocs hashtables\r
ui ui.gadgets ui.gadgets.panes ui.gadgets.editors\r
ui.gadgets.scrollers ui.commands ui.gadgets.frames ui.gestures\r
- ui.gadgets.tabs ui.gadgets.grids ui.gadgets.lists ui.gadgets.labels\r
+ ui.gadgets.tabs ui.gadgets.grids ui.gadgets.packs ui.gadgets.labels\r
io io.styles namespaces calendar calendar.format models continuations\r
irc.client irc.client.private irc.messages irc.messages.private\r
irc.ui.commandparser irc.ui.load qualified ;\r
\r
TUPLE: ui-window client tabs ;\r
\r
-TUPLE: irc-tab < frame listener client listmodel ;\r
+TUPLE: irc-tab < frame listener client userlist ;\r
\r
: write-color ( str color -- )\r
foreground associate format ;\r
\r
GENERIC: handle-inbox ( tab message -- )\r
\r
-: filter-participants ( assoc val -- alist )\r
- [ >alist ] dip\r
- '[ second , = ] filter ;\r
+: filter-participants ( pack alist val color -- )\r
+ '[ , = [ <label> , >>color add-gadget ] [ drop ] if ] assoc-each ;\r
\r
: update-participants ( tab -- )\r
- [ listmodel>> ] [ listener>> participants>> ] bi\r
- [ +operator+ filter-participants ]\r
- [ +voice+ filter-participants ]\r
- [ +normal+ filter-participants ] tri\r
- append append swap set-model ;\r
+ [ userlist>> [ clear-gadget ] keep ]\r
+ [ listener>> participants>> ] bi\r
+ [ +operator+ green filter-participants ]\r
+ [ +voice+ blue filter-participants ]\r
+ [ +normal+ black filter-participants ] 2tri ;\r
\r
M: participant-changed handle-inbox\r
drop update-participants ;\r
{ T{ key-down f f "ENTER" } editor-send }\r
} define-command-map\r
\r
-: <irc-list> ( -- gadget model )\r
- [ drop ]\r
- [ first2 [ <label> ] dip >>color ]\r
- { } <model> [ <list> ] keep ;\r
-\r
: <irc-tab> ( listener client -- irc-tab )\r
irc-tab new-frame\r
swap client>> >>client swap >>listener\r
\r
: <irc-channel-tab> ( listener client -- irc-tab )\r
<irc-tab>\r
- <irc-list> [ <scroller> @right grid-add ] dip >>listmodel\r
- [ update-participants ] keep ;\r
+ <pile> [ <scroller> @right grid-add ] keep >>userlist ;\r
\r
: <irc-server-tab> ( listener client -- irc-tab )\r
<irc-tab> ;\r
\r
M: irc-tab graft*\r
- [ listener>> ] [ client>> ] bi\r
- add-listener ;\r
+ [ listener>> ] [ client>> ] bi add-listener ;\r
\r
M: irc-tab ungraft*\r
- [ listener>> ] [ client>> ] bi\r
- remove-listener ;\r
+ [ listener>> ] [ client>> ] bi remove-listener ;\r
+\r
+M: irc-tab pref-dim*\r
+ drop { 480 480 } ;\r
\r
: join-channel ( name ui-window -- )\r
[ dup <irc-channel-listener> ] dip\r