1616-- channels matching the entered text (and highlighting the
1717-- matching portion).
1818
19- module Matterhorn.Draw.ChannelList (renderChannelList , renderChannelListHeader ) where
19+ module Matterhorn.Draw.ChannelList
20+ ( renderChannelList
21+ , renderChannelListHeader
22+ , channelListWidth
23+ )
24+ where
2025
2126import Prelude ()
2227import Matterhorn.Prelude
@@ -34,6 +39,7 @@ import qualified Network.Mattermost.Types as MM
3439
3540import Matterhorn.Draw.Util
3641import Matterhorn.State.Channels
42+ import Matterhorn.Constants ( channelListMinAutoWidth , channelListMaxAutoWidth )
3743import Matterhorn.Themes
3844import Matterhorn.Types
3945import Matterhorn.Types.Common ( sanitizeUserText )
@@ -54,10 +60,17 @@ data ChannelListEntryData =
5460 , entryUserStatus :: Maybe UserStatus
5561 }
5662
57- sbRenderer :: ScrollbarRenderer n
63+ sbRenderer :: VScrollbarRenderer n
5864sbRenderer =
59- verticalScrollbarRenderer { renderScrollbarHandleBefore = str " ▲"
60- , renderScrollbarHandleAfter = str " ▼"
65+ verticalScrollbarRenderer { renderVScrollbarHandleBefore = str " ▲"
66+ , renderVScrollbarHandleAfter = str " ▼"
67+ , scrollbarWidthAllocation = 2
68+ , renderVScrollbar =
69+ hLimit 1 $
70+ renderVScrollbar verticalScrollbarRenderer
71+ , renderVScrollbarTrough =
72+ hLimit 1 $
73+ renderVScrollbarTrough verticalScrollbarRenderer
6174 }
6275
6376renderChannelListHeader :: ChatState -> MM. TeamId -> Widget Name
@@ -84,9 +97,9 @@ renderChannelList :: ChatState -> MM.TeamId -> Widget Name
8497renderChannelList st tId =
8598 header <=> vpBody
8699 where
87- ( sbOrientation, sbPad) = case st^. csResources. crConfiguration. configChannelListOrientationL of
88- ChannelListLeft -> ( OnLeft , padLeft ( Pad 1 ))
89- ChannelListRight -> ( OnRight , padRight ( Pad 1 ))
100+ sbOrientation = case st^. csResources. crConfiguration. configChannelListOrientationL of
101+ ChannelListLeft -> OnLeft
102+ ChannelListRight -> OnRight
90103 myUsername_ = myUsername st
91104 channelName e = ClickableChannelListEntry $ channelListEntryChannelId e
92105 renderEntry s e = clickable (channelName e) $
@@ -96,7 +109,7 @@ renderChannelList st tId =
96109 withVScrollBars sbOrientation $
97110 withVScrollBarHandles $
98111 withClickableVScrollBars VScrollBar $
99- viewport (ChannelListViewport tId) Vertical $ sbPad body
112+ viewport (ChannelListViewport tId) Vertical body
100113 body = case teamMode $ st^. csTeam(tId) of
101114 ChannelSelect ->
102115 let zipper = st^. csTeam(tId). tsChannelSelectState. channelSelectMatches
@@ -269,3 +282,16 @@ recentChannelSigil = "<"
269282
270283returnChannelSigil :: String
271284returnChannelSigil = " ~"
285+
286+ channelListWidthAutoPercent :: Double
287+ channelListWidthAutoPercent = 0.2
288+
289+ channelListWidth :: ChatState -> Int
290+ channelListWidth st =
291+ case configChannelListWidth $ st^. csResources. crConfiguration of
292+ ChannelListWidthFixed w -> w
293+ ChannelListWidthAuto ->
294+ let calcWidth = round $ channelListWidthAutoPercent * (fromIntegral width :: Double )
295+ width = fst $ st^. csResources. crWindowSize
296+ in min channelListMaxAutoWidth $
297+ max channelListMinAutoWidth calcWidth
0 commit comments